原因:
一般程序初始化的时候焦点就会落到某个控件上或者说窗口,当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比較才能響應。
一般程序初始化的时候焦点就会落到某个控件上或者说窗口,当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/