c语言 windows程序设计之键盘消息处理
2014-05-23 18:43
253 查看
一、应用程序从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消息
上述是一段消息循环代码,在处理DOWN消息时,若按下是能产生可显示字符的键,则在TranslateMessage()函数后会产生一个WM_CHAR消息,并插入到刚刚的DOWN消息之后,所以在处理键盘事件时,一般为不产生字符的按键使用WM_KEYDOWN消息,而产生字符的事件,我们在WM_CHAR中处理
三、对于一些复合键,如Ctrl+s,……
键盘只有唯一的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,……
相关文章推荐
- c语言 windows程序设计之退出消息
- Windows键盘消息处理
- C语言Windows程序设计 -> 第十天 -> 响应键盘事件
- Windows键盘消息处理
- 一个能够检查Windows传递给窗口消息处理程序的键盘内容和字符消息的程序
- Windows程序设计零基础自学_6_键盘_之键盘处理基础
- windows程序设计 处理消息
- Windows 键盘消息处理
- 消息处理机制-WINDOWS程序设计的难点(摘自Windows程序设计开发指南)
- Windows程序设计零基础自学_6_键盘_之键盘消息_实例代码
- DXUT 学习笔记(3)对键盘鼠标的响应 及 消息处理
- 第二人生的源码分析(二十三)人物行走的键盘消息处理
- C#开发WINDOWS应用程序时消息的处理
- 第二人生的源码分析(二十四)人物向前走的键盘消息处理
- 第二人生的源码分析(二十四)人物向前走的键盘消息处理
- Delphi中的消息钩子函数和Windows子类处理 入门篇
- C#开发WINDOWS应用程序时消息的处理
- NPP 示例:演示 Windows 消息处理 API (MAPI) http://msdn2.microsoft.com/zh-cn/library/ms177535(VS.80).aspx
- 关于捕获VCL没有处理的Windows消息
- windows平台消息处理函数(C版)