问题关键字:紫光/输入法/无响应
偶自己写了一个编辑器,此编辑器目前总的来说运行良好,不过发现一个偶无法理解的Bug
在使用紫光拼音3.0的情况下(3.0.0.3045以及3.0.0.0 alpha 21225两个版本),切换输入法偶尔会导致整个应用程序无响应,此时该程序所在进程占用CPU为0(也就是说应该不存在死循环可能),由于此错误出现频率较低(10个人同时用一天可能会出现1到2次中招),截至目前为止未能在Debug运行状态被捕获。
在此编辑器的实现里,偶处理了WM_IME_STARTCOMPOSITION消息,以及WM_IME_NOTIFY(IMN_SETOPENSTATUS)通知。处理代码如下:
case WM_IME_STARTCOMPOSITION:
{
HWND hwnd = GetSafeHwnd();
if(hwnd)
{
HIMC hImc = ImmGetContext(hwnd);
COMPOSITIONFORM cfs;
CPoint pt = GetCaretPos();
cfs.dwStyle = CFS_POINT;
if(pt.x < 1) pt.x = 1;
if(pt.y < 1) pt.y = 1;
cfs.ptCurrentPos = pt;
ImmSetCompositionWindow(hImc, &cfs);
ImmReleaseContext(hwnd, hImc);
}
}
break;
case WM_IME_NOTIFY:
{
switch(wParam)
{
case IMN_SETOPENSTATUS:
{
HWND hwnd = GetSafeHwnd();
if(hwnd)
{
HIMC hImc = ImmGetContext(hwnd);
if(ImmGetOpenStatus(hImc))
{
LOGFONT lf;
if(GetFont(lf))
{
ImmSetCompositionFont(hImc, &lf);
}
COMPOSITIONFORM cfs;
CPoint pt = GetCaretPos();
cfs.dwStyle = CFS_POINT;
cfs.ptCurrentPos = pt;
ImmSetCompositionWindow(hImc, &cfs);
ImmReleaseContext(hwnd, hImc);
}
}
}
break;
}
}
break;
有劳达人帮忙看看,偶实在是不知道哪个地方会引起问题。谢谢了。