WM_CHAR、WM_KEYDOWN和WM_SYSKEYDOWN消息
2008-11-08 17:51
316 查看
WM_KEYDOWN和WM_CHAR都是键盘消息。TranslateMessage函数已经将按键消息转换成字符消息了,那么WndProc函数中需要对事件进行选择。如:键入“D”键,就应该选择WM_CHAR,因为WM_CHAR 只是字母,不包含特殊字符如Ctrl等。
如果键盘键入的是“Ctrl+D”,则应该选择WM_KEYDOWN,因为WM_KEYDOWN既包含字母也包含特殊字符。
WM_CHAR是由WM_KEYDOWN消息Translate()之后产生的,然后再发送给窗口过程。例如按下“D”键,产生WM_KEYDOWN消息,此消息经过Translate()处理后变成了WM_KEYDOW、WM_CHAR两个消息传递给窗口过程。
而WM_SYSKEYDOWN是接受快捷键或系统命令按键的,像Alt键就是。所以捕获Alt键时,在WM_KEYDOWN下是无效的,要在WM_SYSKEYDOWN中。Ctrl和shift不属于WM_SYSKEYDOWN。
键盘消息的处理从PreProcessMessage方法开始,按下表所述的逻辑顺序进行。(了解这个过程或许有助于对上面三个消息的理解)
如果键盘键入的是“Ctrl+D”,则应该选择WM_KEYDOWN,因为WM_KEYDOWN既包含字母也包含特殊字符。
WM_CHAR是由WM_KEYDOWN消息Translate()之后产生的,然后再发送给窗口过程。例如按下“D”键,产生WM_KEYDOWN消息,此消息经过Translate()处理后变成了WM_KEYDOW、WM_CHAR两个消息传递给窗口过程。
而WM_SYSKEYDOWN是接受快捷键或系统命令按键的,像Alt键就是。所以捕获Alt键时,在WM_KEYDOWN下是无效的,要在WM_SYSKEYDOWN中。Ctrl和shift不属于WM_SYSKEYDOWN。
键盘消息的处理从PreProcessMessage方法开始,按下表所述的逻辑顺序进行。(了解这个过程或许有助于对上面三个消息的理解)
相关文章推荐
- WM_CHAR、WM_KEYDOWN和WM_SYSKEYDOWN消息
- WM_CHAR、WM_KEYDOWN和WM_SYSKEYDOWN消息
- WM_CHAR、WM_KEYDOWN和WM_SYSKEYDOWN消息
- WM_CHAR、WM_KEYDOWN和WM_SYSKEYDOWN消息
- 键盘消息WM_KEYDOWN/WM_KEYUP、WM_SYSKEYDOWN/WM_SYSKEYUP与字符消息WM_CHAR的区别
- WM_CHAR、WM_KEYDOWN和WM_SYSKEYDOWN消息
- WM_CHAR、WM_KEYDOWN和WM_SYSKEYDOWN消息
- 引用 WM_CHAR、WM_KEYDOWN和WM_SYSKEYDOWN消息
- CWnd派生类无法接受WM_CHAR和WM_KEYDOWN等消息
- wm_keydown 和vm_char 区别以及 mfc DiapatchMessage派送消息返回之前的过程解析
- WM_Char消息和WM_KeyDown消息!
- WM_CHAR,WM_KEYDOWN和WM_SYSKEYDOWN
- WM_KEYDOWN消息 与 WM_CHAR消息 有何不同
- WM_CHAR,WM_KEYDOWN,WM_SYSKEYDOWN
- 对话框不响应WM_KEYDOWN消息,可以通过重载BOOL PreTranslateMessage(MSG * pMsg)来实现
- 使用WM_CHAR消息来限制用户的输入
- 处理 WM_KEYDOWN,WM_KEYUP,WM_SYSKEYDOWN,WM_SYSKEYUP 信息时lParam 参数的值的说明
- 如何使对话框中接收到WM_CHAR消息(Windows编程)
- WM_CHAR消息
- 孙鑫VC++深入详解:Lesson8 Part3---如何让对话框捕获WM_KEYDOWN消息?