Windows Api教案5.docx

上传人:b****3 文档编号:2832392 上传时间:2022-11-15 格式:DOCX 页数:35 大小:58.85KB
下载 相关 举报
Windows Api教案5.docx_第1页
第1页 / 共35页
Windows Api教案5.docx_第2页
第2页 / 共35页
Windows Api教案5.docx_第3页
第3页 / 共35页
Windows Api教案5.docx_第4页
第4页 / 共35页
Windows Api教案5.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

Windows Api教案5.docx

《Windows Api教案5.docx》由会员分享,可在线阅读,更多相关《Windows Api教案5.docx(35页珍藏版)》请在冰豆网上搜索。

Windows Api教案5.docx

WindowsApi教案5

第五章键盘

一键盘基础

⒈扫描码

当每按下一个键或者释放一个键,键盘设备就产生一个扫描码,这些扫描码可以唯一地确定相应的键。

每个键可以产生两个不同的扫描码,当键按下时,产生的扫描码最高有效位为0,当键释放时,产生的扫描码最高有效位为1。

譬如,Esc的扫描码为1,数字键1、2、3的扫描码为2、3、4等。

⒉虚拟键盘

为了提供与设备无关的键盘操作,Windows定义了一个虚拟键盘。

虚拟键盘不但包括了目前键盘所用的标准键集,还定义了一些目前键盘上没有的虚拟键,以便将来进行适当的扩充。

由Windows通过键盘驱动程序将各种不同的物理键盘映射到同一个虚拟键盘上,而应用程序只需处理这唯一的虚拟键盘的输入即可。

 

 

⒊虚拟键表

下表列出了绝大多数Windows定义的虚拟键的键码,这些虚拟键均带有前缀VK_。

虚拟键表

十进

制值

十六进

制值

Windows中定义的标识符

IBMPC键盘中相应的键

是否必须

1

01

VK_LBUTTON

鼠标左键

2

02

VK_RBUTTON

鼠标右键

3

03

VK_CANCEL

Ctrl-Break

4

04

VK_MBUTTON

鼠标中键

8

08

VK_BACK

Backspace

9

09

VK_TAB

Tab

12

0C

VK_CLEAR

NumLock关闭时数字键盘5

13

0D

VK_RETURN

Enter

16

10

VK_SHIFT

Shift

17

11

VK_CONTROL

Ctrl

18

12

VK_MENU

Alt

19

13

VK_PAUSE

Pause

20

14

VK_CAPTIAL

CapsLock

27

1B

VK_ESCAPE

Esc

32

20

VK_SPACE

Spacebar

33

21

VK_PRIOR

PageUp

34

22

VK_NEXT

PageDown

35

23

VK_END

End

36

24

VK_HOME

Home

37

25

VK_LEFT

LeftArrow

38

26

VK_UP

UpArrow

39

27

VK_RIGHT

RightArrow

40

28

VK_DOWN

DownArrow

41

29

VK_SELECT

42

2A

VK_PRINT

43

2B

VK_EXECUTE

44

2C

VK_SNAPSHOT

PrintScreen

45

2D

VK_INSERT

Insert

46

2E

VK_DELETE

Delete

47

2F

VK_HELP

48~57

30~39

N/A

主键盘上的0~9

65~90

41~5A

N/A

A~Z

91

5B

VK_LWIN

左Windows键

92

5C

VK_RWIN

右Windows键

93

5D

VK_APPS

Applications键

96~105

60~69

VK_NUMPAD0~

VK_NUMPAD9

NumLock打开时数字键盘上的0~9

106

6A

VK_MULTIPLY

数字键盘上的*键

107

6B

VK_ADD

数字键盘上的+键

108

6C

VK_SEPARATER

109

6D

VK_SUBTRACT

数字键盘上的-键

110

6E

VK_DECIMAL

数字键盘上的·键

111

6F

VK_DIVIDE

数字键盘上的/键

112~121

70~79

VK_F1~VK_F10

功能键F1~F10

122~135

7A~87

VK_F11~VK_F24

功能键F11~F24

144

90

VK_NUMLOCK

NumLock

155

91

VK_SCROLL

ScrollLock

二键盘消息

Windows中的键盘消息分为两大类,即击键消息和字符消息。

对于键盘上的所有键,每次按下或者释放时,都会产生击键消息。

但是,只有那些产生可显示字符或控制字符的键,才会产生字符消息。

对于产生可显示字符或者控制字符的击键或击键组合,Widows不仅向应用程序发送击键消息,而且还发送字符消息。

对于不产生可显示字符或控制字符的键,系统只发送击键消息而不发送字符消息。

⒈击键消息

①分类

WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN、WM_SYSKEYUP。

在通常情况下,按下键和释放键消息是成对出现的。

如果按住一个键不放达到一定时间,会激活系统自动重复功能,在这种情况下,当该键最终被释放的时候,系统会给相应的窗口过程发送一系列WM_KEYDOWN(或WM_SYSKEYDOWN)消息和一个WM_KEYUP(或WM_SYSKEYUP)消息。

②系统击键消息

该类型消息通常由含有Alt键的击键组合产生,用于快速激活菜单及菜单中的选项、切换当前窗口和其他系统操作。

这些消息通常由系统处理,应用程序通常忽略系统击键消息,而由窗口函数将这些消息交由系统默认处理函数DefWindowProc去处理。

③击键消息参数

参数wParam中是虚拟键代码,用于指定所按下或者释放的键。

参数lParam包含了与击键消息相关的其他有用信息。

LParam的32位共分为6个部分,见下图:

31

30

29

24

23

16

15

0

 

说明:

◆重复次数

重复次数表示该消息代表的击键次数。

在通常情况下,重复次数的值为1。

如果按住一个键不放,则系统将自动重复产生该键的击键消息WM_KEYDOWN(或WM_SYSKEYDOWN)。

当Windows向消息队列里放置一条WM_KEYDOWN消息(或WM_SYSKEYDOWN消息)时,如果在此之前已经存在相同的击键消息,则系统将相同的消息合并为一条,而将该击键消息的重复计数值加1。

如果重复计数的值大于1,则表明击键的速度大于窗口函数处理键盘消息的速度,此时,窗口函数把WM_KEYDOWN消息看作重复消息。

窗口函数可以根据需要忽略重复计数而将其视为一次击键,或者根据重复计数的值将其作为多次击键来处理。

WM_KEYUP和WM_SYSKEYUP消息的重复计数始终为1。

◆OEM扫描码

OEM扫描码由键盘硬件产生。

◆扩展键标志

该标志仅一位,用来指示按下或释放的键是否为IBM扩展键盘上的键,这些键包括扩展键盘顶部的功能键、非数字键盘上的光标移动键、Insert和Delete等特殊功能键、NumLock键、数字键盘上的“/”键和回车键,以及右Alt键和右Ctrl键等。

如果是扩展键,在该位为1,否则为0。

在通常情况下,应用程序忽略该标志位。

◆Alt键标志

Alt键标志只有一位,用来指示该键是否与Alt键同时被按下。

如果是,则该位为1,否则为0。

◆先前状态标志

该标志也仅一位,用以标识键的先前状态。

如果该键先前被按下,则该位为1,否则为0。

◆过渡状态标志

如果键正被按下,则该位为0;如果键正被释放,则该位为1。

④GetKeyState函数

SHORTGetKeyState(

intiVirtKey//virtual-keycode

);

说明:

其中,唯一的参数iVirtKey用于指定需要检查状态的键,该函数通过将返回的短整数的不同位设置为不同的值,来指示各种不同的按键情况。

例如:

nState=GetKeyState(VK_SHIFT);

这时可检查nState的最高位是否为1来判断Shift键的状态。

nState=GetKeyState(VK_CAPTIAL);

这时可检查nState的最低位是否为1来判断CapsLock键的状态。

⑤GetAsyncKeyState函数

SHORTGetAsyncKeyState(

intvKey//virtual-keycode

);

说明:

该函数与GetKeyState的返回值含义是相同的。

两者的不同之处在于,函数GetKeyState获取的是击键消息产生时指定键的状态,而函数GetAscyncKeyState获取的是执行该语句时指定键的当前状态。

⒉字符消息

对于那些产生可显示字符的操作,Windows还会向窗口函数发送字符消息。

字符消息不是由硬件产生的,而是由击键消息转换而来的。

即由消息循环代码完成的。

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

TranslateMessage函数从WM_KEYDOWN或WM_SYSKEYDOWN击键消息中取得虚拟键码,如果相应的击键操作产生可显示字符,则TranslateMessage把相应的字符消息放入消息队列中,在紧随其后的下一个消息循环中,该字符消息被取出并发往相应的窗口函数。

①分类

WM_CHAR、WM_DEADCHAR、WM_SYSCHAR、WM_SYSDEADCHAR。

前两种由WM_KEYDOWN转换而来,后两种由WM_SYSKEYDOWN转换而来。

在某些非英语的键盘上,有些键用于给字母加音标。

由于它们本身并不产生字符,所以称为“死键”。

一般不处理。

②参数

字符消息的lParam参数与相应的击键消息的lParam参数意义相同,但wParam参数不再是虚拟键码,而是字符代码。

例如:

按下并释放Shift键消息表

消息

键或代码

WM_KEYDOWN

虚拟键码VK_SHIFT(0x10)

WM_KEYUP

虚拟键码VK_SHIFT(0x10)

按下并释放A键消息表

消息

键或代码

WM_KEYDOWN

“A”的虚拟键码(0x41)

WM_CHAR

“a”的字符代码(0x61)

WM_KEYUP

“A”的虚拟键码(0x41)

按下Shift键同时按下大写A键,并同时释放的消息表

消息

键或代码

WM_KEYDOWN

虚拟键码VK_SHIFT(0x10)

WM_KEYDOWN

“A”的虚拟键码(0x41)

WM_CHAR

“A”的字符代码(0x41)

WM_KEYUP

“A”的虚拟键码(0x41)

WM_KEYUP

虚拟键码VK_SHIFT(0x10)

⒊KEYVIEW1程序

/*--------------------------------------------------------

KEYVIEW1.C--DisplaysKeyboardandCharacterMessages

(c)CharlesPetzold,1998

--------------------------------------------------------*/

#include

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1