c语言 windows程序设计之键盘消息处理

时间:2023-01-18 17:02:33

一、应用程序从Windows接收的关于键盘事件的消息可以分为按键和字符两类。

键盘只有唯一的A键,按下该键是一次按键,释放该键也是一次按键。但是键盘也是能产生可显示字符或控制字符的输入设备。例如,根据Ctrl、 Shift和Caps Lock键的状态,A键能产生几个字符。通常情况下,此字符为小写a。如果按下Shift键或者打开了Caps Lock,则该字符就变成大写A。如果按下了Ctrl,则该字符为Ctrl-A(它在ASCII中有意义,但在Windows中可能是某事件的键盘快捷键)。在一些键盘上,A按键之前可能有「死字符键(dead-character key)」或者Shift、Ctrl或者Alt的不同组合,这些组合可以产生带有音调标记的小写或者大写,例如,à、á、

对产生可显示字符的按键组合,Windows不仅给程序发送按键消息,而且还发送字符消息。有些键不产生字符,这些键包括shift键、功能键、光标移动键和特殊字符键如Insert和Delete。对于这些键,Windows只产生按键消息。


二、 WM_KEYDOWN 、WM_KEYUP 或者 WM_SYSKEYDOWN、WM_SYSKEYUP是成对出现的,所以一般我们处理DOWN消息

 while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}


上述是一段消息循环代码,在处理DOWN消息时,若按下是能产生可显示字符的键,则在TranslateMessage()函数后会产生一个WM_CHAR消息,并插入到刚刚的DOWN消息之后,所以在处理键盘事件时,一般为不产生字符的按键使用WM_KEYDOWN消息,而产生字符的事件,我们在WM_CHAR中处理


三、对于一些复合键,如Ctrl+s,……