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

来源:互联网 发布:游戏源码怎么看 编辑:程序博客网 时间:2024/04/29 09:00
原因:
      一般程序初始化的时候焦点就会落到某个控件上或者说窗口,当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/


原创粉丝点击