问题描述
创建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_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 ‘键(引号)