您的位置:首页 > 其它

windows程序设计_第6章_键盘——学习笔记

2013-07-25 16:51 344 查看

Windows程序设计第6章 键盘

一、键盘基础

1、 忽略键盘

键盘是WINDOWS程序中经常用到的用户输入的主要来源,但是程序没有必要去处理所接收到的每一个键盘消息。在默认情况下,一些系统功能的击键操作会被交付给DefWindowProc函数处理。

2、 焦点

有输入焦点的窗口:接收到键盘事件的窗口。

活动窗口:总是最上层的窗口,他的父窗口句柄是NULL。窗口过程通过捕获WM_SETFOCUS\WM_KILLFOCUS消息来确定自己的窗口是否具有输入焦点。

3、 队列和同步

1) 应用程序消息队列

2) 系统消息队列

3) 二步处理法:先把消息存储在系统消息队列,再把它们发送到应用程序消息队列,原因是需要同步。

4、 击键和字符

1) 键盘事件的消息:击键和字符

2) 按下一个键一个消息,释放一个键又是一个消息

二、击键消息

1、  系统击键和非系统击键

 
键按下
键释放
非系统击键

WM_KEYDOWN

WM_KEYUP

系统击键

WM_SYSKEYDOWN

WM_SYSKEYUP

   几乎所有影响程序窗口的消息都将先经过窗口过程。仅当应用程序传递消息给DefWindowProc函数时,Windows才会处理这些消息。

   以上四类击键操作,wParam是虚拟键代码,用于标识哪个键被按下或被释放,而lParam包含属于本次击键的一些其他数据。

2、   虚拟键代码

    大多数的虚拟键代码以VK_开头,可查表。

3、  lParam信息

 

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

扩展键标记

8位OEM扫描码

键的先前状态

内容代码

转换状态

16位重复计数

 

4、  转义状态

1) 通过调用GetKeyState函数获取是否有转义键(shift,ctrl,alt)被按下。

该函数的用法:并不实时检查键盘状态,它反映了到目前为止的键盘状态,并包含了正在被处理的键盘消息。它无法让你获得独立于标准键盘消息的键盘信息。

2) GetKeyState和GetAsyncKeyState的区别

GetAsyncKeyState:在按下某个键的同时被调用,判断正在按下某键

GetKeyState:在按过某键之后再调用,它返回最近的键盘消息从线程的队列中移出时的键盘状态,判断刚按过了某键。

三、字符消息

1、 四类字符消息

 
字符
死字符
消息来源
非系统字符
WM_CHAR
WM_DEADCHAR
WM_KEYDOWN
系统字符
WM_SYSCHAR
WM_SYSDEADCHAR
WM_SYSKEYDOWN
              大多数情况下,windows程序会忽略其他三种字符消息,仅处理WM_CHAR消息。

2、 消息排序

1)输入顺序:按下SHIFT,按下A键,释放A键,再释放SHIFT键。

消息
击键或代码
WM_KEYDOWN
虚拟键代码VK_SHIFT(0X10)
WM_KEYDOWN
“A”的虚拟键代码(0X41)
WM_CHAR
“A”的字符编码(0X41)
WM_KEYUP
“A”的虚拟键代码(0X41)
WM_KEYUP
虚拟键代码VK_SHIFT(0X10)
2)输入顺序:持续按住A键,然后释放

消息
击键或代码
WM_KEYDOWN
“A”的虚拟键代码(0X41)
WM_CHAR
“a”的字符编码(0X61)
WM_KEYDOWN
“A”的虚拟键代码(0X41)
WM_CHAR
“a”的字符编码(0X61)
WM_KEYDOWN
“A”的虚拟键代码(0X41)
WM_CHAR
“a”的字符编码(0X61)
WM_KEYUP
“A”的虚拟键代码(0X41)
 

3、 控制字符的处理

1) 基本规则:如果需要读取输入到窗口中的键盘字符,就处理WM_CHAR消息,如果需要读取光标键、功能键、DELETE键、INSERT键、SHIFT键、CTRL键、ALT键,则处理WM_KEYDOWN消息。另外TAB键、回车键、ESC键、空格键可以看作控制字符,而不是虚拟键。

四、插入符号(不是光标)

1、 插入符号:指示输入的下一个字符将出现在屏幕上的位置。

光标:表示鼠标位置的位图图像,即鼠标指针。

2、 基本插入符号函数

函数
功能
CreateCaret

创建和窗口关联的插入符号

SetCaretPos

设置窗口内的插入符号位置

ShowCaret

显示插入符号

HideCaret

隐藏插入符号

DestroyCaret

销毁插入符号

GetCaretPos

获得当前插入符号位置

GetCaretBlinkTime

获得插入符号闪烁时间

SetCaretBlinkTime

设置插入符号闪烁时间

 

3、 插入符号的使用规则

在窗口过程处理WM_SETFOCUS消息时调用CreateCaret函数,处理WM_KILLFOCUS消息时调用DestroyCaret 函数。

 

<
9910
/article>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: