键盘

来源:互联网 发布:信捷编程软件 编辑:程序博客网 时间:2024/04/30 12:31

四种击键消息:WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN、WM_SYSKEYUP。一般与ALT键结合的击键会产生系统击键消息,交由Windows处理(DefWindowProc)。对所有四种消息,wParam是虚拟键码(Virtual Key Code),lParam是击键的其他信息。

 

虚拟键码是相对扫描码而言,键码宏定义在WINUSER.H,VK_开头。

 

lParam分为6个部分:

0~15位:重复次数。当按住键盘时,如果程序处理速度比Windows设置的响应频率慢时,Windows会把多次按键消息合并成一个消息,并累计重复次数。而WM_KEYUP和WM_SYSKEYUP重复次数总为1。

16~23位:OEM扫描码。除非用到物理层键盘时我们才会用到扫描码。

24位:扩展键标识

29位:Context Code

30位:前次击键状态。对WM_KEYUP和WM_KEYUP,该位总是1。对WM_KEYDOWN和WM_SYSKEYDOWN,如果前一次是释放置0,前次按下置1,表明按下后连续输入(typematic repeat)

31位:Transition State。按键消息为0,释放消息为1。

 

 

四种字符消息:WM_CHAR、WM_DEADCHAR、WM_SYSCHAR、WM_SYSDEADCHAR。WM_CHAR和WM_DEADCHAR由WM_KEYDOWN消息转化而来,另两种由WM_SYSKEYDOWN消息转化而来。Dead-Character消息是处理非英文键盘,一般我们只需要处理WM_CHAR消息,而不用管其他字符消息。字符消息的lParam与击键消息的意义相同,而wParam表示ANSI或UNICODE码而不是虚拟按键码。是ANSI还是UNICODE编码,由调用的注册窗口类决定(RegisterClassA对应ANSI,RegisterClassW对应UNICODE),也可用IsWindowUnicode(hwnd)查询。一些功能键、‘CTRL+字符’键也会产生字符消息,如退格键、回车键、退出键等。

 

字符消息和击键消息处理原则:字符消息中处理字符按键。击键消息处理光标控制键、功能键、插入键、删除键、Ctrl、Shift和Alt。对Tab、Enter、Esc、BackSpace这些既是功能键又会产生字符消息的,一般做为字符消息处理。

 

原创粉丝点击