关于WM_CHAR 消息的解读
来源:互联网 发布:微信淘宝客转换工具 编辑:程序博客网 时间:2024/04/30 10:07
一直都以为OnChar消息函数 或者 说 WM_CHAR 可以处理所有的按键信息。原来是错误的,WM_CHAR 对应的只是字符而不是按键。其中,字符是指的0-127内的ASCII码。具体的说明参照以下的文章。
http://hi.baidu.com/%BF%AA%D0%C4_%D0%D6%B5%DC/blog/item/170b5273f26e7a1f8601b0c1.html
理解虚拟键码、扫描码和ASCII字符码
在编写MFC应用程序过程中,需要对原有的CEdit作功能上的扩展,新生成的类CEditEx继承于CEdit,只允许用户输入数字和小数点。
要实现只允许用户输入数字和小数点,需要屏蔽非数字和小数点的字符,屏蔽工作在OnChar消息函数中进行:当按下键盘后,解发WM_CHAR消息,并进入OnChar消息函数,用::isdigit(nChar)验证数字,用nChar == '.'验证小数点,满足其一即调用父类OnChar函数继续处理:CEdit::OnChar(nChar, nRepcnt, nFlag)。
另外,一些按键如ESC、Tab键,当按下后并不能够触发WM_CHAR消息并进入OnChar消息函数,这时需要在PreTranslateMessage函数中用::TranslateMessage函数对pMsg消息翻译处理,其实也就是在这个函数中将虚拟键码(Virtua- Key) 即pMsg->wParam重新翻译为ASCII字符码,当翻译的ASCII字符码在0-127之间时,将向消息队列中递交字符消息WM_CHAR。
试一下:如果在调用::TranslateMessage函数后立刻用GetMessage截获消息MSG,将会发现下一个消息是WM_CHAR,并且wParam已被翻译为ASCII字符码。
理解1.
OnChar函数参数变量nChar是ASCII字符码,经过试验只有当按键所对应的ASCII码在0-127之间时才触发WM_CHAR消息,并进入OnChar消息函数,例如:键入上下左右键,是不会进入OnChar函数的。
理解2.
如果对计算机键盘I/O比较了解,应该知道键盘上每一个键对应一个扫描码,扫描码是由OEM生商制定的,不同厂商生产的键盘同样一个按键的扫描码都有可能出现不一致的情况,为摆脱由于系统设备不一致造成扫描码不一致的情形,通过键盘驱动程序将扫描码映射为统一的虚拟键码表示,如回车键定义为VK_RETURN,其16进制值为0x0D。
相关资源: ascii码表百科
http://baike.baidu.com/view/15482.htm
- 关于WM_CHAR 消息的解读
- WM_CHAR消息
- WM_CHAR消息
- WM_CHAR消息
- 基于MFC对话框的键盘消息响应 WM_KEYDOWN WM_CHAR消息
- wm_char消息处理
- Dialog响应WM_CHAR消息
- 关于OnChar 和 WM_CAHR消息的解读
- 关于OnChar 和 WM_CAHR消息的解读
- 关于 WM_CAHR 和 OnChar 消息的解读
- 使用WM_CHAR消息来限制用户的输入
- 子类化实现DialogBox中Edit控件的WM_CHAR消息
- MFC为何不响应WM_CHAR消息的解释理解
- MFC对话框程序不能响应WM_CHAR消息的解决办法
- 2016001 WM_CHAR消息,中文乱码问题的解决方案
- MFC为何不响应WM_CHAR消息的解释理解
- WM_Char消息和WM_KeyDown消息!
- WM_CHAR消息与WM_KEYDOWN消息
- 一种基于libgds的简单内存泄露的检测方法
- 苹果 开发者账号区别
- grep&egrep cmd/shell
- 12306 抢票助手 Java
- c++中使用new和delete动态分配内存
- 关于WM_CHAR 消息的解读
- 中国人会的就得多!!!
- 域名解析常识
- 腾讯微信技术架构
- 红外线透视?
- Eclipse连接SQL Server 2008数据库
- 对人脑记忆的探索
- Nhibernate: Foreign key must have same number of columns as the referenced primary key
- Python目录操作