唉,C完全没有学好,本来挺简单的一个字符消息,在实现的时候,弄了好久弄不出来...............
当按下会产生字符的键,比如说a-z,0-9之类的时候会产生字符消息,他们包括:
字符 | 死字符 | |
非系统字符 | WM_CHAR | WM_DEADCHAR |
系统字符 | WM_SYSCHAR | WM_SYSDEADCHAR |
所谓死字符呢,就是在一些带音调之类的字母里,调节音调,但是又不真正产生字符的键。一般是不用理会的,因为即便产生了这个消息,也会将改好音调的字符发送到WM_CHAR,直接用就得了。
既然是消息,和其他消息一样,字符消息的参数也保存在lParam和wParam。
保存在lParam中的和键盘消息一样,都是些按键的信息。而wParam就不是虚拟键码,而是具体字符的ANSI或Unicode字符代码。
在产生字符消息的同时,键盘消息也是存在的。
比如说单击a的同时,产生了这样的消息:
消息 | 按键或者代码 |
WM_KEYDOWN | 「A」的虚拟键码(0x41) |
WM_CHAR | 「a」的字符代码(0x61) |
WM_KEYUP | 「A」的虚拟键码(0x41) |
一直按的时候,会产生这样的消息:
消息 | 按键或者代码 |
WM_KEYDOWN | 「A」的虚拟键码(0x41) |
WM_CHAR | 「a」的字符代码(0x61) |
WM_KEYDOWN | 「A」的虚拟键码(0x41) |
WM_CHAR | 「a」的字符代码(0x61) |
WM_KEYDOWN | 「A」的虚拟键码(0x41) |
WM_CHAR | 「a」的字符代码(0x61) |
WM_KEYDOWN | 「A」的虚拟键码(0x41) |
WM_CHAR | 「a」的字符代码(0x61) |
WM_KEYUP | 「A」的虚拟键码(0x41) |
消息 | 按键或者代码 |
WM_KEYDOWN | 虚拟键码VK_SHIFT (0x10) |
WM_KEYDOWN | 「A」的虚拟键码(0x41) |
WM_CHAR | 「A」的字符代码(0x41) |
WM_KEYUP | 「A」的虚拟键码(0x41) |
WM_KEYUP | 虚拟键码VK_SHIFT(0x10) |
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)