MFC 键盘响应
来源:互联网 发布:梦龙网络计划软件流水 编辑:程序博客网 时间:2024/04/29 22:50
一:首先介绍键盘消息
系统消息:
ALT,F1,——F24等,是由系统内部处理的,程序本身就存在,比如F1是帮助键。
WM_SYSKEYDOWN
WM_SYSKEYUP
WM_SYSCHAR
非系统消息:
是由我们自己加上去的,
WM_KEYDOWN
WM_KEYUP
WM_CHAR
二:然后介绍虚拟键代码
符号形式 十六进制形式 说明
VK_LBUTTON 01 鼠标左键
VK_RBUTTON 02 鼠标右键
VK_CANCEL 03 Control-break 过程
VK_MBUTTON 04 鼠标中键
VK_BACK 08 BACKSPACE 键
VK_TAB 09 TAB 键
VK_CLEAR 0C CLEAR 键
VK_RETURN 0D ENTER 键
VK_SHIFT 10 SHIFT 键
VK_CONTROL 11 CTRL 键
VK_MENU 12 ALT 键
VK_PAUSE 13 PAUSE 键
VK_CAPITAL 14 CAPS LOCK 键
VK_ESCAPE 1B ESC 键
VK_SPACE 20 SPACEBAR
VK_PRIOR 21 PAGE UP 键
VK_NEXT 22 PAGE DOWN 键
VK_END 23 END 键
VK_HOME 24 HOME 键
VK_LEFT 25 LEFT ARROW 键
VK_UP 26 UP ARROW 键
VK_RIGHT 27 RIGHT ARROW 键
VK_DOWN 28 DOWN ARROW 键
VK_SELECT 29 SELECT 键
VK_EXECUTE 2B EXECUTE 键
VK_SNAPSHOT 2C PRINT SCREEN键(用于Windows 3.0及以后版本)
VK_INSERT 2D INS 键
VK_DELETE 2E DEL 键
VK_HELP 2F HELP键
VK_LWIN 5B Left Windows 键 (Microsoft自然键盘)
VK_RWIN 5C Right Windows 键 (Microsoft自然键盘)
VK_APPS 5D Applications 键 (Microsoft自然键盘)
VK_NUMPAD0 60 数字小键盘上的 0 键
VK_NUMPAD1 61 数字小键盘上的 1 键
VK_NUMPAD2 62 数字小键盘上的 2 键
VK_NUMPAD3 63 数字小键盘上的 3 键
VK_NUMPAD4 64 数字小键盘上的 4 键
VK_NUMPAD5 65 数字小键盘上的 5 键
VK_NUMPAD6 66 数字小键盘上的 6 键
VK_NUMPAD7 67 数字小键盘上的 7 键
VK_NUMPAD8 68 数字小键盘上的 8 键
VK_NUMPAD9 69 数字小键盘上的 9 键
VK_MULTIPLY 6A Multiply 键
VK_ADD 6B Add键
VK_SEPARATOR 6C Separator 键
VK_SUBTRACT 6D Subtract 键
VK_DECIMAL 6E Decimal 键
VK_DIVIDE 6F Divide 键
VK_F1 70 F1 键
VK_F2 71 F2 键
VK_F3 72 F3 键
VK_F4 73 F4 键
VK_F5 74 F5 键
VK_F6 75 F6 键
VK_F7 76 F7 键
VK_F8 77 F8 键
VK_F9 78 F9 键
VK_F10 79 F10 键
VK_F11 7A F11 键
VK_F12 7B F12 键
VK_F13 7C F13 键
VK_F14 7D F14 键
VK_F15 7E F15 键
VK_F16 7F F16 键
VK_F17 80H F17 键
VK_F18 81H F18 键
VK_F19 82H F19 键
VK_F20 83H F20 键
VK_F21 84H F21 键
VK_F22 85H F22 键
VK_F23 86H F23 键
VK_F24 87H F24 键
VK_NUMLOCK 90 NUM LOCK 键
VK_SCROLL 91 SCROLL LOCK 键
VK_ATTN F6 Attn 键
VK_CRSEL F7 CrSel 键
VK_EXSEL F8 ExSel 键
VK_EREOF F9 Erase EOF 键
VK_PLAY FA Play 键
VK_ZOOM FB Zoom 键
VK_OEM_CLEAR FE Clear 键
三:OnKeyDown不响应的原因:
只是这个消息在到达窗体之前,已经被它的子控件捕获了,如果将窗体中的所有控件都删除,窗体就会捕获到这个消息,但要注意的是,MFC为了实现在窗体上切换子控件的焦点,已经将 VK_TAB,VK_LEFT,VK_RIGHT,VK_UP,VK_DOWN进行了处理,同时VK_RETURN也被系统捕获用来处理相应的确定事件,所以即使窗体中没控件,这几个键还是无法捕获
也就是说,一个窗体仅在它没有可视和有效的控件时,才能响应OnKeyDown。
四:具体的解决方法(按键响应方法)
可以调用窗体的PreTranslateMessage函数来实现,具体代码如下:
BOOL CMeetingDlg::PreTranslateMessage(MSG* pMsg){if (pMsg->message==WM_KEYDOWN){ switch (pMsg->wParam) { case VK_F1: if (::GetKeyState(VK_CONTROL)<0) { AfxMessageBox("ss"); } break; case VK_F2: if (::GetKeyState(VK_CONTROL)<0) { AfxMessageBox("ss"); } break; } }return CDialog::PreTranslateMessage(pMsg);}
***********************************************************************************
在MFC(Microsoft Foundation Class)对响应消息进行了封装,
可以通过重载虚函数PreTranslateMessage()对所关心的消息进行截取与响应:
以下对截取与响应键盘 Enter 消息的截取与响应
这是对话框的响应键盘 Enter 消息方式:
BOOL C**Dlg::PreTranslateMessage(MSG* pMsg){ //判断是否为键盘消息 if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST) { //判断是否按下键盘Enter键 if(pMsg->wParam==VK_RETURN) { return TRUE; } } return CDialog::PreTranslateMessage(pMsg);}
这是View视图类响应键盘 Enter 消息的方式:
BOOL C**View::PreTranslateMessage(MSG* pMsg){ if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST) { if(pMsg->wParam==VK_RETURN ) { return TRUE; } } return CFormView::PreTranslateMessage(pMsg);}
在上面的代码中,首先将pMsg->message所表示的消息同WM_KEYFIRST 和WM_KEYLAST比较,确定是键盘消息,然后通过消息参数pMsg->wParam的值来判断是否是回车键(VK_RETURN,虚拟键码可以下面相关资料中查到)。
原址:http://blog.sina.com.cn/s/blog_674aa7a70100j46q.html
- MFC 键盘响应事件
- MFC 键盘响应
- MFC 响应键盘消息
- MFC键盘响应消息
- MFC 键盘响应
- MFC 键盘响应
- MFC中键盘响应
- MFC 键盘响应
- MFC 键盘响应
- MFC 键盘响应
- MFC 键盘响应消息
- MFC对话框之键盘响应
- VS2008 MFC键盘响应操作
- 【mfc】鼠标、键盘响应事件
- MFC MDI 响应键盘事件
- MFC响应键盘方向键消息
- 在VC/MFC中响应键盘按键
- 在VC/MFC中响应键盘按键
- 470多例winform 界面特效
- Flex与java通过BlazeDS实现通信(简单Demo)
- 青涩的思绪 泛起粉色的涟漪
- android Wifi简介
- win7系统关机后自动重启以及在启动之前DHCP
- MFC 键盘响应
- Latex表格字体颜色
- 组合数学-容斥原理专辑
- JavaWeb体系结构的理解-4.JavaBean技术
- showModalDialog 缓存问题
- 新目标,新期望。
- iOS开发中属性 property 和 synthesize 权威的介绍
- 如何在servlet取得spring beans (autowired)
- godaddy无法续费问题解决办法