VC++中如何重新定义键盘响应?
在对话框中怎么实现对“F1”和“ESC”键的重新动作定义?这两个键好像都是系统定义了的,我在OnKeydown中和PreTranslateMessage中都无法消除系统自...
在对话框中怎么实现对“F1”和“ESC”键的重新动作定义?这两个键好像都是系统定义了的,我在OnKeydown中和PreTranslateMessage中都无法消除系统自带的反应,如何做才能重新定义它的响应?
展开
展开全部
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的
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的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询