自由拼音输入法的另一个错误


错误在文件uistatus.c中,文件在处理case WM_LBUTTONUP:消息时有下面这段代码:

hSvrWnd = (HWND)GetWindowLong(hWnd,FIGWL_SVRWND)
hIMC = (HIMC)GetWindowLong(hSvrWnd,IMMGWL_IMC);
lpIMC = ImmLockIMC(hIMC);
if(lpIMC->fOpen) { //在你用鼠标点击状态窗口进行中英文切换时,程序运行到这可能会出错。
lpIMC->fOpen=FALSE;
MakeResultString(hIMC,FALSE);
}
else lpIMC->fOpen=TRUE;

经过调试发再,lpIMC为零,也就是没有获得输入上下文部件.

为什么呢,因为其它输入法在失去输入焦点的时候会隐藏状态窗口(输入法只有在获得输入焦点的时候才能获得输入上下文),而自由拼音没有,所以在你失去输入焦点的时候去点击状态窗口切换中英文的时候,程序无法获得输入上下文,对if(lpIMC->fOpen) 的执行就会使程序崩溃.

把这段程序改一下就可以了:

if (hIMC = (HIMC)GetWindowLong(hSvrWnd,IMMGWL_IMC))
{
if( (lpIMC = ImmLockIMC(hIMC)) != NULL ){
if(lpIMC->fOpen) {
lpIMC->fOpen=FALSE;
MakeResultString(hIMC,FALSE);
}
else lpIMC->fOpen=TRUE;
}
if( lpIMC != NULL )
ImmUnlockIMC(hIMC);
}

可能这也是为什么有人说自由拼音输入法跟有些程序不兼容的原因吧。

因你难过



如果你不幸福,
我会很难过,
因为我爱你。
你如果幸福,
我会更难过,
因为让你幸福的人不是我,
你的幸福与我无关,
我注定会因你难过。

曾经沧海


曾经沧海难为水,除却巫山不是云

晴 温度:30℃-35℃



刚又做了个记牌器,衢州星空棋牌的港式五张