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

时间:2024-05-31 11:33:30

问题描述

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

 

添加PreTranslateMessage()消息函数

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

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

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

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

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_LBUTTON 01 1 鼠标的左键
VK_RBUTTON 02 2 鼠标的右键
VK-CANCEL 03 3 Ctrl+Break(通常不需要处理)
VK_MBUTTON 04 4 鼠标的中键(三按键鼠标)
VK_BACK 08 8 Backspace键
VK_TAB 09 9 Tab键
VK_CLEAR 0C 12 Clear键(Num Lock关闭时的数字键盘5)
VK_RETURN 0D 13 Enter键
VK_SHIFT 10 16 Shift键
VK_CONTROL 11 17 Ctrl键
VK_MENU 12 18 Alt键
VK_PAUSE 13 19 Pause键
VK_CAPITAL 14 20 Caps Lock键
VK_ESCAPE 1B 27 Ese键
VK_SPACE 20 32 Spacebar键
VK_PRIOR 21 33 Page Up键
VK_NEXT 22 34 Page Domw键
VK_END 23 35 End键
VK_HOME 24 36 Home键
VK_LEFT 25 37 LEFT ARROW 键(←)
VK_UP 26 38 UP ARROW键(↑)
VK_RIGHT 27 39 RIGHT ARROW键(→)
VK_DOWN 28 40 DOWN ARROW键(↓)
VK_Select 29 41 Select键
VK_PRINT 2A 42  
VK_EXECUTE 2B 43 EXECUTE键
VK_SNAPSHOT 2C 44 Print Screen键(抓屏)
VK_Insert 2D 45 Ins键(Num Lock关闭时的数字键盘0)
VK_Delete 2E 46 Del键(Num Lock关闭时的数字键盘.)
VK_HELP 2F 47 Help键
VK_0 30 48 0键
VK_1 31 49 1键
VK_2 32 50 2键
VK_3 33 51 3键
VK_4 34 52 4键
VK_5 35 53 5键
VK_6 36 54 6键
VK_7 37 55 7键
VK_8 38 56 8键
VK_9 39 57 9键
VK_A 41 65 A键
VK_B 42 66 B键
VK_C 43 67 C键
VK_D 44 68 D键
VK_E 45 69 E键
VK_F 46 70 F键
VK_G 47 71 G键
VK_H 48 72 H键
VK_I 49 73 I键
VK_J 4A 74 J键
VK_K 4B 75 K键
VK_L 4C 76 L键
VK_M 4D 77 M键
VK_N 4E 78 N键
VK_O 4F 79 O键
VK_P 50 80 P键
VK_Q 51 81 Q键
VK_R 52 82 R键
VK_S 53 83 S键
VK_T 54 84 T键
VK_U 55 85 U键
VK_V 56 86 V键
VK_W 57 87 W键
VK_X 58 88 X键
VK_Y 59 89 Y键
VK_Z 5A 90 Z键
VK_NUMPAD0 60 96 数字键0键
VK_NUMPAD1 61 97 数字键1键
VK_NUMPAD2 62 98 数字键2键
VK_NUMPAD3 62 99 数字键3键
VK_NUMPAD4 64 100 数字键4键
VK_NUMPAD5 65 101 数字键5键
VK_NUMPAD6 66 102 数字键6键
VK_NUMPAD7 67 103 数字键7键
VK_NUMPAD8 68 104 数字键8键
VK_NUMPAD9 69 105 数字键9键
VK_MULTIPLY 6A 106 数字键盘上的*键
VK_ADD 6B 107 数字键盘上的+键
VK_SEPARATOR 6C 108 Separator键
VK_SUBTRACT 6D 109 数字键盘上的-键
VK_DECIMAL 6E 110 数字键盘上的.键
VK_DIVIDE 6F 111 数字键盘上的/键
VK_F1 70 112 F1键
VK_F2 71 113 F2键
VK_F3 72 114 F3键
VK_F4 73 115 F4键
VK_F5 74 116 F5键
VK_F6 75 117 F6键
VK_F7 76 118 F7键
VK_F8 77 119 F8键
VK_F9 78 120 F9键
VK_F10 79 121 F10键
VK_F11 7A 122 F11键
VK_F12 7B 123 F12键
VK_NUMLOCK 90 144 Num Lock 键
VK_SCROLL 91 145 Scroll 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 ‘键(引号)