vc++生成的对话框程序默认是不会响应OnChar和OnKeyDown消息的,会被其它控件拦截 如果不修改代码,使用时会发现不会进入这两个事件响应函数,必须修改重写PreTranslateMessage()虚函数才能正确地响应这两个消息函数,具体实现如下: BOOL CTestDlg::PreTranslateMessage(MSG* pMsg) { SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam); return 0; //return CDialog::PreTranslateMessage(pMsg); } 这样,程序就能正确地调用onKeyDown和onChar这两个函数了,且onKeyDown()在onCchar()之前处理的。 这样就能在对话框中响应WM_CHAR、WM_KEYDOWM消息了,注意在发送WM_CHAR时,实际发送了三个消息 即 WM_CHAR WM_KEYDOWM WM_KEYUP 所以,如果你有如下代码: void CMy1Dlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default if(nChar=='a') MessageBox("a"); CDialog::OnChar(nChar, nRepCnt, nFlags); } 会弹出两个消息对话框 ,所以最好单独在WM_KEYDOWM或WM_KEYUP处理事件。
VC++对话框程序不响应OnChar 和 OnKeyDown事件处理函数
最新推荐文章于 2024-07-25 14:40:07 发布