理解虚拟键码,扫描码和ASCII字符码
来源:互联网 发布:程序员团队口号 编辑:程序博客网 时间:2024/06/06 10:16
在编写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。
要实现只允许用户输入数字和小数点,需要屏蔽非数字和小数点的字符,屏蔽工作在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字符码
- 理解虚拟键码,扫描码和ASCII字符码
- 个人理解键盘扫描码、虚拟键码和ASCII
- 理解键盘的扫描码、虚拟键、ASCII
- 字符和ASCII码
- 虚拟键码和扫描码
- 键盘 BIOS 扫描码和 ASCII 码表
- iOS使用ASCII码和NSScanner字符扫描来判断关于键盘限制输入
- 虚拟码-->ASCII码
- 键盘ASCII虚拟码
- VC中虚拟键和ASCII码的关系
- 虚拟键码和扫描码的区别
- ASCII码和字符的互换
- 字符、字节、ASCII码
- 字符转ASCII码
- 字符ASCII码转换
- ASCII码与字符
- ascii码转字符
- 关于 mysql5 改密码后不能登录的问题
- Tiger核心库简介
- Java的破解和反破解之道
- [转]今天看到的一篇js屏蔽键盘的代码,经典!
- [原创]DataGrid分页,排序(正序反序)功能及注意点
- 理解虚拟键码,扫描码和ASCII字符码
- Windows消息大全使用详解
- JAVA泛型QUIK START
- 何谓聪明
- YILUDA免费计数器 PRODUCT BLOG 开张。
- J2SE 5.0专题 之 用户接口
- 修改注册表决定IE是以进程还是线程方式运行
- Windows系统文件名详解
- Memory Leak