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

本文介绍了解决MFC对话框中控件截获WM_CHAR和WM_KEYDOWN消息,导致对话框无法响应ONKEYDOWN和ONCHAR函数的问题。通过重写PreTranslateMessage函数,并适当调用SendMessage和CDialogEx::PreTranslateMessage,使键盘消息能够正确传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

最后一步:在调转的代码(函数名为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);

这样就可以了:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值