在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);
}
本文介绍了一种在MFC应用程序中实现键盘消息响应的方法。通常使用OnKeyDown函数处理键盘事件,但有时效果不理想。文章提供了通过重载PreTranslateMessage函数来解决此问题的详细步骤,并附带了示例代码。
3907

被折叠的 条评论
为什么被折叠?



