MFC中ON_CAHR、ON_KEYDOWN(键盘消息)无法实现的解决方法

1.在mfc中的对话框中,影射了WM_CHAR和WM_KEYDOWN消息后,但是对话框不能响应ONKEYDOWN和ONCHAR函数

2.原因:MFC在进行设计的时候,这两个消息被对话框上的控件截获了,不能到达两个消息响应函数

3(假定需要实现键盘消息(ONCHAR为例)是我的WINDOWTHREE对话框).解决方法:重写PreTranslateMessage函数:步骤如下:

打开类视图,找到WINDOWTHREE右击点击属性后:

MFC中ON_CAHR、ON_KEYDOWN(键盘消息)无法实现的解决方法

看见没那有个重写的图标点击,下拉找到PreTranslateMessage函数紧右边有个可以下拉的地方点击<ctreate>PreTranslateMessage  因为我已经ctreae过了所以是<delete>PreTranslateMessage 

MFC中ON_CAHR、ON_KEYDOWN(键盘消息)无法实现的解决方法

最后一步:在调转的代码(函数名为BOOL WINDOWTHREE::PreTranslateMessage(MSG* pMsg)
)下写上:

SendMessage(pMsg->message, pMsg->wParam, pMsg->IParam);
    return CDialogEx::PreTranslateMessage(pMsg);

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

SendMessage(pMsg->message, pMsg->wParam);
    return CDialogEx::PreTranslateMessage(pMsg);

这样就可以了:

MFC中ON_CAHR、ON_KEYDOWN(键盘消息)无法实现的解决方法