错误在文件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);
}
可能这也是为什么有人说自由拼音输入法跟有些程序不兼容的原因吧。
没有评论:
发表评论