如果用vc建立一个基于对话框的工程,为对话框添加WM_KeyDown的响应函数,代码如下,
void CHomeKeyDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
// TODO: Add your message handler code here and/or call default
 
CString str;
switch(nChar)
{
case VK_LEFT:
str="向左键";
break;
case VK_RIGHT:
str="向右键";
break;
case VK_UP:
str="向上键";
break;
case VK_DOWN:
str="向下键";
break;
case VK_HOME:
str="home键";
break;
default:
str="其他键";
} MessageBox("您按下了"+str,MB_OK);
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
但是当按向下或其他方向键时没反应,当按home键是有对话框弹出,其他键也有反应。
如果建立一个单文档的工程,在view下添加WM_KeyDown消息响应函数,如下
void CHomeKey2View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
// TODO: Add your message handler code here and/or call default
CString str;
switch(nChar)
{
case VK_LEFT:
str="向左键";
break;
case VK_RIGHT:
str="向右键";
break;
case VK_UP:
str="向上键";
break;
case VK_DOWN:
str="向下键";
break;
case VK_HOME:
str="home键";
break;
default:
str="其他键";
} MessageBox("您按下了"+str,MB_OK);
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
这时就完全正常了,不知道是什么原因。

解决方案 »

  1.   

    Dialog中用PreTranslateMsg来捕获WM_KeyDown
      

  2.   

    可是home键可以捕获,为什么方向键不能呢?
      

  3.   

    http://www.huarw.com/program/vc/vc03/200511/6333.html
      

  4.   

    呵呵,我菜鸟啊 有点看不懂,但现在是知道了,对话框程序要用PreTranslateMessage捕获wm_keydown,但为什么home键可以捕获,end键 我刚才试了也可以,为什么方向键不能呢?
      

  5.   

    要响应WM_GETDLGCODE消息,在处理函数中返回DLGC_WANTARROWS