windows编程之键盘消息总结

<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 撤消插入符号

你可能感兴趣的:(windows,键盘消息)