<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键,产生的消息依次是:WM_KEYDOWN,WM_CHAR,WM_KEYUP。
<9>
关于控制字符:enter,backspace,Escape,这些键当然会产生虚拟键码,但同时也会产生WM_CHAR消息,因而产生字符(控制字符),通常的做法是把这些消息放在WM_CHAR消息中处理。
case '\b': // backspace
//其它行程序
break ;
case '\t': // tab
//其它行程序
break ;
case '\n': // linefeed
//其它行程序
break ;
case '\r': // carriage return
//其它行程序
break ;
<10>
插入符号函数:
CreateCaret 建立与窗口有关的插入符号
SetCaretPos 在窗口中设定插入符号的位置
ShowCaret 显示插入符号
HideCaret 隐藏插入符号
DestroyCaret 撤消插入符号