按键响应事件切到中文输入法卡死"/>
MFC: 按键响应事件切到中文输入法卡死
最近做了一个MFC项目,用到了按键响应事件,发现当在中文输入法下有按下按键的动作之后,MFC程序就会卡死
解决方法①
经过切换输入法发现:搜狗中文输入法下会卡死,但是微软的中文下不会卡死,只是那样就是打拼音了而已,无法执行按键事件,但不卡死就好
解决方法②先找到类视图
找不到可以在VS的右上角搜索
找到XXXAPP,右击属性
找到重写
在工程名.cpp会生成以下函数
BOOL CTimeRecordingApp::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
return CWinApp::PreTranslateMessage(pMsg);
}
我们加入以下代码
BOOL CTimeRecordingApp::PreTranslateMessage(MSG* pMsg)
{// TODO: 在此添加专用代码和/或调用基类const TCHAR sClassName[] = _T("IME");const TCHAR sWindowText[] = _T("Default IME");HWND hImeWnd01 = FindWindow(sClassName, sWindowText);HWND hImeWnd02 = NULL;DWORD dwProcessID = 0, dwCurrentThreadID = GetCurrentThreadId();while (IsWindow(hImeWnd01)){if (dwCurrentThreadID == GetWindowThreadProcessId(hImeWnd01, &dwProcessID)){hImeWnd02 = hImeWnd01;}else{hImeWnd02 = NULL;}if (hImeWnd02 != NULL){DestroyWindow(hImeWnd02);}hImeWnd01 = FindWindowEx(NULL, hImeWnd01, sClassName, sWindowText);}return CWinApp::PreTranslateMessage(pMsg);
}
问题解决,在搜狗输入法和微软下都可以了,其实质是禁用了搜狗的中文输入法,如下图,不知道如果有输入文字的需要行不行呢
解决方法③和方法②一样,只是加的代码不一样,我没有测试成功,不过智者见智,也许对大家的工程有用呢
BOOL CTimeRecordingApp::PreTranslateMessage(MSG* pMsg)
{// TODO: 在此添加专用代码和/或调用基类if (pMsg->message == WM_INPUTLANGCHANGEREQUEST){HKL hkl = (HKL)pMsg->lParam;ActivateKeyboardLayout(hkl, KLF_REPLACELANG);//激活对应输入法// 直接返回,不要调用默认的输入法处理;否则会导致死机return TRUE;}return CWinApp::PreTranslateMessage(pMsg);
}
更多推荐
MFC: 按键响应事件切到中文输入法卡死
发布评论