唉,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) |
case WM_CHAR:
szKey=wParam;
InvalidateRect(hWnd,NULL,1);
break;

case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
TextOut(hdc,10,10,&szKey,1);
EndPaint(hWnd, &ps);
break;
C语言字符消息处理
本文介绍了C语言中字符消息的处理方法,包括WM_CHAR、WM_SYSCHAR等消息的区别及应用。详细解析了如何通过wParam获取具体的字符代码,并提供了一个简单的示例程序。
1743

被折叠的 条评论
为什么被折叠?



