MFC键盘响应事件、不响应怎么办、亲测解决、字母和数字键的键码值

    技术2022-07-10  101

    ①对话框右击->属性 然后会生成代码

    void CTimeRecordingDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialogEx::OnChar(nChar, nRepCnt, nFlags); }

    ②添加响应事件(自由发挥,我的如下,我是调用我的Button按钮,相当于用按下按键,BUTTON下的函数执行)

    void CTimeRecordingDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialogEx::OnChar(nChar, nRepCnt, nFlags); if (nChar == 86)//V { OnBnClickedHappy(); } if (nChar ==66)//B { OnBnClickedEyebrow(); } if (nChar == 78)//N { OnBnClickedSurprise(); } if (nChar == 77)//M { OnBnClickedMouth(); MessageBox(_T("M键按下")); } }

    ③如果不能响应的话,就重写PreTranslateMessage函数,如下:点到类视图,选择Dlg类(对话框类)右击选择属性 选择重写PreTranslateMessage函数后生成代码如下

    BOOL CTimeRecordingDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 return CDialogEx::PreTranslateMessage(pMsg); }

    ④我们需要自己加上一句

    SendMessage(pMsg->message, pMsg->wParam, pMsg->IParam);

    有的编译器可能会报错:这样需要删掉最后一个参数:

    BOOL CTimeRecordingDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 SendMessage(pMsg->message, pMsg->wParam); return CDialogEx::PreTranslateMessage(pMsg); }

    测试圆满完成(记得把输入法调到大写模式) 附:字母和数字键的键码值(keyCode) https://www.cnblogs.com/yiven/p/7118056.html 大写:A → 65,B → 66,C → 67,D → 68,E → 69,F → 70,G → 71,H → 72,I → 73,J → 74,K → 75,L → 76,M → 77,N → 78,O → 79,P → 80,Q → 81,R → 82,S → 83,T → 84,U → 85,V → 86,W → 87,X → 88,Y → 89,Z → 90 小写:a → 97,b → 98,c → 99,d → 100,e → 101,f → 102,g → 103,h → 104,i → 105,j → 106,k → 107,l → 108,m → 109,n → 110,o → 111,p→ 112,q → 113,r → 114,s → 115,t → 116,u → 117,v → 118,w → 119,x → 120,y → 121,z → 122

    Processed: 0.017, SQL: 9