基于MFC对话框的键盘消息响应


在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);

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值