对话框无法捕捉WM_CHAR,WM_KEYDOWN,WM_KEYUP的解決方法

原因:
      一般程序初始化的时候焦点就会落到某个控件上或者说窗口,当KEYDOWN的时候是由当前活动的窗口处理的(每个控件也都是一个窗口),所以视图或者对话框就会没反应,最好在PreTranslateMessage里处理。

解決方法:

重載函數PreTranslateMessage

PreTranslateMessage进行处理,代码如下:
if ( pMsg-> message ==WM_CHAR )
{
        char nChar = pMsg-> wParam;//可以得到鍵值,進行處理
        //或者 SendMessage(WM_CHAR,pMsg->wParam,pMsg->lParam); //添加WM_CHAR響應函數
        return TRUE;
}
else
{
        return CDialog::PreTranslateMessage(pMsg);
}

//注意:像一些特殊鍵如ESC……不是WM_CHAR,需要響應 WM_KEYDOWN && 跟ASCII比較才能響應。

//注意:如果半路將其響應給攔截了,需要將它的回調給屏蔽。。


原文地址:http://blog.163.com/chen_xinghuan/blog/static/17220158220113432737892/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值