牛骨文教育服务平台(让学习变的简单)

VC++中单个键盘按键的响应

关于如何在VC++程序中自定义热键(或称组合键)及其响应,我在之前的博客中已经作了详细的介绍,那么当遇到的是单个键盘按键的响应时,我们又该怎么解决呢?这时,我们可以采用afx_msg BOOL PreTranslateMessage (MSG* pMsg) 这个函数很方便的实现。

但是在此之前,我们必须首先了解键盘按键对应的十进制ASCII码值,下面这张表是每个键盘按键对应的十进制ASCII码值表,会给我们带来很大的方便:

Esc

27

#3

51

>.

190

M

77

37

F1

112

$4

52

?/

191

N

78

38

F2

113

%5

53

Ctrl

17

O

79

39

F3

114

^6

54

左徽标

91

P

80

40

F4

115

&7

55

右徽标

92

Q

81

Num Lock

144

F5

116

*8

56

Alt

18

R

82

/

111

F6

117

(9

57

Space

32

S

83

*

106

F7

118

_-

189

鼠标右快捷键

93

T

84

-

109

F8

119

+=

187

A

65

U

85

+

107

F9

120

Backspace

8

B

66

V

86

.

110

F10

121

Tab

9

C

67

W

87

0

96

F11

122

{[

219

D

68

X

88

1

97

F12

123

}]

221

E

69

Y

89

2

98

PrScrn SysRq

44

|

220

F

70

Z

90

3

99

Scroll Lock

145

Caps Lock

20

G

71

Insert

45

4

100

Pause Break

19

:;

186

H

72

Home

36

5

101

~`

192

“’

222

I

73

PgUp

33

6

102

)0

48

Enter

13

J

74

Delete

46

7

103

!1

49

Shift

16

K

75

End

35

8

104

@2

50

<,

188

L

76

PgDn

34

9

105

注:表中的阴影部分为键盘上的数字小键盘分区。

下面结合实例来详细说明(完整实例可在我的CSDN资源中下载:http://download.csdn.net/detail/margin1988/6648153):

(1)在对话框.h文件中添加函数声明:

afx_msg BOOL PreTranslateMessage(MSG* pMsg);

(2)在对话框的.cpp文件中实现该函数功能:

BOOL CPoint23Dlg::PreTranslateMessage(MSG* pMsg)
{
	if(pMsg->message == WM_KEYDOWN)   
	{
		switch (pMsg->wParam)
		{
       case 65:
			MessageBox("您按了“A键”");
			break;
		//其它按键响应
        }
		return true;//不再响应其它按键(很重要)
	}
	return CDialog::PreTranslateMessage(pMsg);  
}