【转载】MFC键盘响应
转载自:传送门
一:首先介绍键盘消息
系统消息:
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 7 E 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){
<span class="hljs-keyword">return</span> <span class="hljs-keyword">TRUE</span>;}
}
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 ){
<span class="hljs-keyword">return</span> <span class="hljs-keyword">TRUE</span>;}
}
return CFormView::PreTranslateMessage(pMsg);
}
在上面的代码中,首先将pMsg->message所表示的消息同WM_KEYFIRST 和WM_KEYLAST比较,确定是键盘消息,然后通过消息参数pMsg->wParam的值来判断是否是回车键(VK_RETURN,虚拟键码可以下面相关资料中查到)。
另外需要注意:
VK_?? 定义在 winuser.h 中,而对于字母123...,ABC..却没有VK_A,VK_B...
MFC中恰恰没有VK_0 -- VK_9,VK_A --VK_Z ,倒是有VK_NUMPAD0 --VK_NUMPAD9
在delphi,BCB,JAVA中都有。
当然,你可以直接定义,但是打开winuser.h会找到:
所以直接用'A'就行了,主键盘上的数字键也是同理!
【转载】MFC键盘响应相关推荐
- 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9327377 作者:七十一雾央 新浪微博:http:// ...
- MFC消息响应机制及映射机制理解
一.MFC消息响应机制分析 ---- MFC是Windows下程序设计的最流行的一个类库,但是该类库比较庞杂,尤其是它的消息映射机制,更是涉及到很多低层的东西,我们在这里,对它的整个消息映射机制进行了 ...
- iPhone和ipad键盘高度及键盘响应事件 摘
iPhone和ipad键盘高度及键盘响应事件 http://blog.csdn.net/benbenxiongyuan/article/details/7892019 IPAD键盘高度: portra ...
- QT键盘响应卡顿的解决方法
1.不要将事件在键盘响应事件中执行,应在键盘响应事件出设置布尔型变量. 例如: void Widget:: keyPressEvent(QKeyEvent *key)//检测键盘按下{Q_UNUSED ...
- mfc键盘控制移动鼠标光标_如何在Windows中使用键盘控制鼠标光标
mfc键盘控制移动鼠标光标 If you're stuck without a mouse temporarily, don't worry-you can still use your PC. Yo ...
- 38 --> 详解 OpenWRT RESET按键、键盘响应逻辑
OpenWrt 按键处理逻辑采用 hotplug 事件方式进行管理,reset按键,用来进行重启或者恢复出厂操作.热插拔事件流程:内核具有检测 键盘守护程序,gpio_button_hotplug 模 ...
- 【个人笔记】08 回调函数+键盘响应操作
个人资料,仅供学习使用 学习课程:OpenCV4 C++ 快速入门视频30讲--贾志刚 08 回调函数+键盘响应操作 opencv知识点: 回调函数 - callback 键盘响应 - waitKey ...
- 键盘响应事件中的连按问题
连按问题 在按键响应连按的时候遇到了一些问题 即重写了keyPressEvent(QKeyEvent *event)和keyPressRelease(QKeyEvent *event) 但是在具体使用 ...
- opencv快速入门—键盘响应操作
贾志刚老师-opencv基于c++快速入门基础30讲 本节课程中主要讲解利用键盘实现图像处理过程的便捷操作,如:键盘按下1,图像变成灰度图像:键盘按下2,图像变成hsv色彩空间的图像:键盘按下3,图像 ...
最新文章
- ThinkPHP子类继承Controller类的注意事项
- 人脸识别数据集bin解压
- 实践中的电商前端优化
- 多线程爬虫python_一个简单的多线程Python爬虫
- 大叔公开课~微服务与持久集成
- 在C#中利用DirectX实现声音播放
- jQuery 中 data 方法的实现原理
- Selenium自动化测试-JavaScript定位
- 基于LD3320的嵌入式语音识别系统设计
- 劲爆!Java 通用泛型要来了。。
- linux kernel source code analysis
- Sql Server 2008完全卸载方法(其他版本类似)
- v5服务器装系统,小白必学:宏基V5-591G内存、固态、装系统教程!
- LPDDR4X与LPDDR4 区别 <转>
- 测试开发工程师必备技术栈(附详细技术点)
- autocomplete触发事件_如何防止onSelect事件在DevBridge jQuery Autocomplete中触发两次
- ios9提取安装包ipa_iOS获取ipa包以及图片资源
- 大数据平台的开发与思考一:
- 字节跳动为什么选用 Flutter : 可能成为不一样的未来 | 开发者说·DTalk
- Goland 代码飘红