现在的位置: 首页 > 综合 > 正文

Windows程序设计 读书笔记 – 键盘。

2012年01月14日 ⁄ 综合 ⁄ 共 854字 ⁄ 字号 评论关闭

一、键盘事件处理过程。

1,击键。

2,windows和键盘驱动程序将硬件扫描吗转化为格式消息,放在windows维护的"系统消息队列"中。

3,windows从系统消息队列中,取一个消息,发送给当前获得焦点的窗口的应用程序消息队列。

4,应用程序处理该该消息完毕后,windows才能接下来从"系统消息队列"中去获得下一个消息。

  因为前面的消息处理可能会影响后一个消息的处理情况,比如tab按键可能会影响获得焦点的控件等等。

 

二、击键产生的消息:

系统键 WM_SYSKEYDOWN WM_SYSKEYUP

非系统键 WM_KEYDOWN WM_KEYUP

系统键由alt+其他键组成,程序一般忽略系统键,并把它直接交给DefWindowProc处理,然后接受处理后的结果。

 

三、键盘消息

msg.wParam 存放虚拟键码。

msg.lParam 存放其他信息。

 

四、虚拟键码。

对于键盘硬件来说,按键是按照键的物理顺序编码的,但程序中不这样,所以有一套对应的虚拟键码。

VK_开头的,可以在程序中查看定义的地方看。

ctrl + pause break = esc

 

五、lParam信息:

31位 : 转换状态 --- 正在被按下OR释放

30位 : 键先前的状态

29位 : 环境代码 --  是否按下ALT

24位 : 扩展键标志

23-16位:OEM扫描吗

15-0位:重复计数  -- 有几下没处理的按键消息

取出某一位的算法: 0x80000000 & msg.lParam

 

六、检测某按键是否按下:

GetkeyState(CK_SHIFT)。如果结果的高位被置位,也就是为负,就表示按下:

if (GetKeyState(VK_SHIFT)<0)

if (HIWORD(GetKeyState(VK_SHIFT)))

 

七、击键消息和字符消息。

WM_KEYDOWN 产生 WM_CHAR

 

八、插入符函数

CreateCaret

SetCaretPos

GetCaretPos

ShowCaret

HideCaret

DestroyCaret

GetCaretBlinkTime

SetCaretBlinkTime

抱歉!评论已关闭.