MFC: 按键响应事件切到中文输入法卡死

编程入门 行业动态 更新时间:2024-10-26 10:38:12

MFC: <a href=https://www.elefans.com/category/jswz/34/1768597.html style=按键响应事件切到中文输入法卡死"/>

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: 按键响应事件切到中文输入法卡死

本文发布于:2024-02-11 00:39:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1678201.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:按键   中文输入法   事件   MFC

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!