VC++中如何重新定义键盘响应?

在对话框中怎么实现对“F1”和“ESC”键的重新动作定义?这两个键好像都是系统定义了的,我在OnKeydown中和PreTranslateMessage中都无法消除系统自... 在对话框中怎么实现对“F1”和“ESC”键的重新动作定义?这两个键好像都是系统定义了的,我在OnKeydown中和PreTranslateMessage中都无法消除系统自带的反应,如何做才能重新定义它的响应? 展开
 我来答
zhccsd
2013-08-24 · TA获得超过4042个赞
知道大有可为答主
回答量:1347
采纳率:66%
帮助的人:915万
展开全部
F1比较简单,添加OnHelpInfo消息,把return CDialog::OnHelpInfo(pHelpInfo);给注释掉,换成自己的代码最后返回个false即可。
ESC有两种方法,可以重写OnCancel,处理方法同上,不过不是很推荐,这样右上角的关闭关不掉软件。
另外可以重写PreTranslateMessage
if(pMsg->message==WM_KEYDOWN)
{
if(pMsg->wParam==VK_ESCAPE)
{
MessageBox("ESC");
return false;
}
}
return CDialog::PreTranslateMessage(pMsg);
默认情况下按ESC会触发OnCancel,所以要在PreTranslateMessage中截获这个情况,直接return false就不会执行OnCancel了
不过这种方法不能对F1适用,F1触发的OnHelpInfo发生在PreTranslateMessage前面,所以PreTranslateMessage是拦截不到F1的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式