void CTestDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CString str;
str.Format("%d ,%c",nChar,nRepCnt);
AfxMessageBox(str);
//CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CTestDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
UpdateData(1);
AfxMessageBox("char");
//CDialog::OnChar(nChar, nRepCnt, nFlags);
}
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
return 0;
//return CDialog::PreTranslateMessage(pMsg);
}
其实映射了ON_WM_CHAR 和ON_WM_KEYDOWN 消息后,对话框接收不到这个消息,这时我们需要要重载PreTranslateMessage这个消息;在里面加上SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);这一句后,对话框的OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 和OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)函数就生效了。onkeydown在onchar之前处理的。
CDialog中OnKeyDown事件和OnChar事件实现
最新推荐文章于 2021-08-12 20:54:59 发布