在MFC中添加键盘的消息响应,通常是通过OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 函数来完成消息的捕捉和响应。但是在很多情况下是对键盘按下是不会有响应的。百度大量资料后,发现网上的一种解决方案是通过重载另外一个函数:PreTranslateMessage(MSG* pMsg)来实现键盘消息响应的!
那如何重载PreTranslateMessage(MSG* pMsg)函数呢?
方法1、在VC6中创建基于对话框的工程,在Class view中找到相应的对话框类单击右键,在右键菜单中选择Add Virtual Fuction...项,然后找到PreTranslateMessage虚函数进行加载。(本人用的是VS2008吧,故未对此法进行尝试)
方法2、对于VS2008、2010来说,打开C***Dlg.h,然后点击属性,图中画红圈的即为重写虚函数,点击,找到PreTranslateMessage重写即可
最后,附上重写代码:
BOOL C小游戏Dlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
// TODO: Add your specialized code here and/or call the base class
//判断是否是按键消息
if( pMsg->message == WM_KEYDOWN )
{
MessageBox("有键被按下");
//判断具体键
switch( pMsg->wParam )
{
case VK_LEFT://按下左键
MessageBox(_T("左"));
pathname="..\\小游戏\\res\\1.bmp";
OnPaint();
return TRUE;
break;
case VK_RIGHT://按下右键
MessageBox(_T("右"));
return TRUE;
break;
case VK_UP://按下上键
MessageBox(_T("上"));
return TRUE;
break;
case VK_DOWN://按下下键
MessageBox(_T("下"));
return TRUE;
break;
default:
return TRUE;
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}