《MFC如何屏蔽ESC和Enter按键退出应用程序》

问题描述

创建MFC应用程序的时候,通常可以通过ESC按键退出应用程序程序,Enter按键来执行当前选中的操作,有时候ESC和Enter有其他的功能,需要屏蔽掉,该怎么办呢?MFC其实已经为我们准备好了,我们只需要添加PreTranslateMessage()消息函数就行了,另外还需要知道按键的虚拟键值表。

 

添加PreTranslateMessage()消息函数

1、选择当前项目的项目名称,点击鼠标右键,选择中间的“类向导”选项

2、点击类向导选项,进入类向导页面,依次选择虚函数PreTranslateMessage添加函数应用确定,消息函数就添加到代码中去了,注意看下是不是添加错了,有的时候会添加到CAboutDlg里面去。

 

3、然后找到 PreTranslateMessage的函数代码段,添加代码,VK_RETURN为Enter按键,VK_ESCAPE为ESC按键,VK_TAB为Tab按键,VK_PRIOR为Page Up按键,这段代码的功能是屏蔽掉Enter按键、ESC按键、Tab按键,然后使用Page Up按键来控制实验的停止,如有不同需求,可以参照修改,还有很多按键的键值请看下面的详细键值表:

/************************************************************************
@函数功能:屏蔽ESC和Enter按键退出对话框
@创建者:
************************************************************************/
BOOL CFCT200Dlg::PreTranslateMessage(MSG* pMsg)
{
	// TODO: 在此添加专用代码和/或调用基类
	if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_RETURN))
	{
		return TRUE;
	}
	if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_ESCAPE))
	{
		return TRUE;
	}
	if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_TAB))
	{
		return TRUE;
	}
	if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_PRIOR))
	{
		OnBnClickedButtonStopexperiment();          
	}
	return CDialogEx::PreTranslateMessage(pMsg);
}

 

键盘键值表

常数名称十六进制值十进制值对应按键
VK_LBUTTON011鼠标的左键
VK_RBUTTON022鼠标的右键
VK-CANCEL033Ctrl+Break(通常不需要处理)
VK_MBUTTON044鼠标的中键(三按键鼠标)
VK_BACK088Backspace键
VK_TAB099Tab键
VK_CLEAR0C12Clear键(Num Lock关闭时的数字键盘5)
VK_RETURN0D13Enter键
VK_SHIFT1016Shift键
VK_CONTROL1117Ctrl键
VK_MENU1218Alt键
VK_PAUSE1319Pause键
VK_CAPITAL1420Caps Lock键
VK_ESCAPE1B27Ese键
VK_SPACE2032Spacebar键
VK_PRIOR2133Page Up键
VK_NEXT2234Page Domw键
VK_END2335End键
VK_HOME2436Home键
VK_LEFT2537LEFT ARROW 键(←)
VK_UP2638UP ARROW键(↑)
VK_RIGHT2739RIGHT ARROW键(→)
VK_DOWN2840DOWN ARROW键(↓)
VK_Select2941Select键
VK_PRINT2A42 
VK_EXECUTE2B43EXECUTE键
VK_SNAPSHOT2C44Print Screen键(抓屏)
VK_Insert2D45Ins键(Num Lock关闭时的数字键盘0)
VK_Delete2E46Del键(Num Lock关闭时的数字键盘.)
VK_HELP2F47Help键
VK_030480键
VK_131491键
VK_232502键
VK_333513键
VK_434524键
VK_535535键
VK_636546键
VK_737557键
VK_838568键
VK_939579键
VK_A4165A键
VK_B4266B键
VK_C4367C键
VK_D4468D键
VK_E4569E键
VK_F4670F键
VK_G4771G键
VK_H4872H键
VK_I4973I键
VK_J4A74J键
VK_K4B75K键
VK_L4C76L键
VK_M4D77M键
VK_N4E78N键
VK_O4F79O键
VK_P5080P键
VK_Q5181Q键
VK_R5282R键
VK_S5383S键
VK_T5484T键
VK_U5585U键
VK_V5686V键
VK_W5787W键
VK_X5888X键
VK_Y5989Y键
VK_Z5A90Z键
VK_NUMPAD06096数字键0键
VK_NUMPAD16197数字键1键
VK_NUMPAD26298数字键2键
VK_NUMPAD36299数字键3键
VK_NUMPAD464100数字键4键
VK_NUMPAD565101数字键5键
VK_NUMPAD666102数字键6键
VK_NUMPAD767103数字键7键
VK_NUMPAD868104数字键8键
VK_NUMPAD969105数字键9键
VK_MULTIPLY6A106数字键盘上的*键
VK_ADD6B107数字键盘上的+键
VK_SEPARATOR6C108Separator键
VK_SUBTRACT6D109数字键盘上的-键
VK_DECIMAL6E110数字键盘上的.键
VK_DIVIDE6F111数字键盘上的/键
VK_F170112F1键
VK_F271113F2键
VK_F372114F3键
VK_F473115F4键
VK_F574116F5键
VK_F675117F6键
VK_F776118F7键
VK_F877119F8键
VK_F978120F9键
VK_F1079121F10键
VK_F117A122F11键
VK_F127B123F12键
VK_NUMLOCK90144Num Lock 键
VK_SCROLL91145Scroll Lock键
    
上面没有提到的:(都在大键盘)   
VK_LWIN 91左win键
VK_RWIN 92右win键
VK_APPS 93右Ctrl左边键,点击相当于点击鼠标右键,会弹出快捷菜单
  186;(分号)
  187=键
  188,键(逗号)
  189-键(减号)
  190.键(句号)
  191/键
  192`键(Esc下面)
  219[键
  220
  221]键
  222‘键(引号)
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值