windows编程之键盘消息总结

本文总结了Windows编程中关于键盘消息的重点,包括活动窗口与输入焦点的概念,WM_SETFOCUS和WM_KILLFOCUS消息,键盘事件的分类,系统与非系统按键的区别,以及wParam和lParam参数的含义。还详细阐述了TranslateMessage函数的作用,消息传递顺序,特别是控制字符的处理以及插入符号的相关函数应用。
<1> 活动窗口:活动窗口通常是顶层窗口,也就是说它的父窗口句柄是NULL
<2> 输入焦点:具有输入焦点的窗口是活动窗口或者活动窗口的衍生窗口(活动窗口的子窗口,活动窗口子窗口的子窗口)
<3> 焦点信息:WM_SETFOCUS,WM_KILLFOCUS来表示获得或者失去焦点信息。
<4> 键盘事件消息分类:按键消息(按下,弹起),字符消息WM_KEYDOWN,WM_KEYUP,WM_SYSKEYDOWN,WM_SYSKEYUP
<5> 系统按键和非系统按键
可以知道,有些按键消息时由操作系统来处理的(例如Alt+Tab),这个时候应用程序不会去拦截系统按键消息,而是交给DefWindowProc去实现。非系统按键消息就是那些不带alt按键组合的按键按下或者按键弹起的消息,windows不会处理这些按键消息。
<6> wParam 和 lParam:wParam存放虚拟键码,表示是什么键按下,lParam存储其它按键信息(重复技术,OEM扫描码,内容代码,键先前状态等)
<7> TranslateMessage(&msg):按键消息转换为字符消息,如果消息为WM_KEYDOWN或者WM_SYSKEYDOWN,并且按键与位移状态相组合产生一个字符消息(位移状态指shift,capslock是否按下)WM_CAHR 。在WM_CHAR的消息下,lParam与之前按键消息的lParam参数相同,但是wParam此时不是虚拟键码,它是ANSI或者unicode字码。
<8> 消息顺序
字符消息是夹杂在按键消息之间传递给消息处理程序的,例如按下A键,产生的消息依次