虚拟键码和windows消息分析

大多数虚拟键码的名称在WINUSER.H表头档案中都定义为以VK_开头。如下

#ifndef NOVIRTUALKEYCODES

 

// begin_r_winuser

 

/*

 *Virtual Keys, Standard Set

 */

#define VK_LBUTTON        0x01

#define VK_RBUTTON        0x02

#define VK_CANCEL         0x03

#define VK_MBUTTON        0x04   /* NOT contiguous with L & RBUTTON */

 

#define VK_BACK           0x08

#define VK_TAB            0x09

 

#define VK_CLEAR          0x0C

#define VK_RETURN         0x0D

 

#define VK_SHIFT          0x10

#define VK_CONTROL        0x11

#define VK_MENU           0x12

#define VK_PAUSE          0x13

#define VK_CAPITAL        0x14

 

#define VK_KANA           0x15

#define VK_HANGEUL        0x15 /* old name - should be here for compatibility */

#define VK_HANGUL         0x15

#define VK_JUNJA          0x17

#define VK_FINAL          0x18

#define VK_HANJA          0x19

#define VK_KANJI          0x19

 

#define VK_ESCAPE         0x1B

 

#define VK_CONVERT        0x1C

#define VK_NONCONVERT     0x1D

#define VK_ACCEPT         0x1E

#define VK_MODECHANGE     0x1F

 

#define VK_SPACE          0x20

#define VK_PRIOR          0x21

#define VK_NEXT           0x22

#define VK_END            0x23

#define VK_HOME           0x24

#define VK_LEFT           0x25

#define VK_UP             0x26

#define VK_RIGHT          0x27

#define VK_DOWN           0x28

#define VK_SELECT         0x29

#define VK_PRINT          0x2A

#define VK_EXECUTE        0x2B

#define VK_SNAPSHOT       0x2C

#define VK_INSERT         0x2D

#define VK_DELETE         0x2E

#define VK_HELP           0x2F

 

/* VK_0 thru VK_9 are the same as ASCII '0'thru '9' (0x30 - 0x39) */

/* VK_A thru VK_Z are the same as ASCII 'A'thru 'Z' (0x41 - 0x5A) */

 

#define VK_LWIN           0x5B

#define VK_RWIN           0x5C

#define VK_APPS           0x5D

 

#define VK_NUMPAD0        0x60

#define VK_NUMPAD1        0x61

#define VK_NUMPAD2        0x62

#define VK_NUMPAD3        0x63

#define VK_NUMPAD4        0x64

#define VK_NUMPAD5        0x65

#define VK_NUMPAD6        0x66

#define VK_NUMPAD7        0x67

#define VK_NUMPAD8        0x68

#define VK_NUMPAD9        0x69

#define VK_MULTIPLY       0x6A

#define VK_ADD            0x6B

#define VK_SEPARATOR      0x6C

#define VK_SUBTRACT       0x6D

#define VK_DECIMAL        0x6E

#define VK_DIVIDE         0x6F

#define VK_F1             0x70

#define VK_F2             0x71

#define VK_F3             0x72

#define VK_F4             0x73

#define VK_F5             0x74

#define VK_F6             0x75

#define VK_F7             0x76

#define VK_F8             0x77

#define VK_F9             0x78

#define VK_F10            0x79

#define VK_F11            0x7A

#define VK_F12            0x7B

#define VK_F13            0x7C

#define VK_F14            0x7D

#define VK_F15            0x7E

#define VK_F16            0x7F

#define VK_F17            0x80

#define VK_F18            0x81

#define VK_F19            0x82

#define VK_F20            0x83

#define VK_F21            0x84

#define VK_F22            0x85

#define VK_F23            0x86

#define VK_F24            0x87

 

#define VK_NUMLOCK        0x90

#define VK_SCROLL         0x91

 

/*

 *VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys.

 *Used only as parameters to GetAsyncKeyState() and GetKeyState().

 * Noother API or message will distinguish left and right keys in this way.

 */

#define VK_LSHIFT         0xA0

#define VK_RSHIFT         0xA1

#define VK_LCONTROL       0xA2

#define VK_RCONTROL       0xA3

#define VK_LMENU          0xA4

#define VK_RMENU          0xA5

 

#if(WINVER >= 0x0400)

#define VK_PROCESSKEY     0xE5

#endif /* WINVER >= 0x0400 */

 

#define VK_ATTN           0xF6

#define VK_CRSEL          0xF7

#define VK_EXSEL          0xF8

#define VK_EREOF          0xF9

#define VK_PLAY           0xFA

#define VK_ZOOM           0xFB

#define VK_NONAME         0xFC

#define VK_PA1            0xFD

#define VK_OEM_CLEAR      0xFE

 

// end_r_winuser

 

#endif /* !NOVIRTUALKEYCODES */


windows消息的分类:

1 WM_PAINT消息

LOWORD(lParam)是客户区的宽,HIWORD(lParam)是客户区的高

2 滚动条WM_VSCROLLWM_HSCROLL消息

LOWORD(wParam)指出了鼠标对滚动条的操作。比如上、下、左、右、翻页、移动等。 

3 击键消息,有WM_SYSKEYDOWNWM_SYSKEYUPWM_KEYUPWM_KEYDOWN

其中wParam是虚拟键代码,lParam是包含属于击键的其他信息。lParam消息参数分为7个域,下图进行详细说明。 

4 字符消息WM_CHARWM_DEADCHARWM_SYSCHARWM_SYSDEADCHAR

lParam消息参数跟击键消息的lParam消息参数内容相同,wParam参数是ANSIUnicode字符代码 

5 客户区鼠标消息WM_LBUTTONDOWNWM_LBUTTONUPWM_RBUTTONDOWNWM_RBUTTONUPWM_MBUTTONDOWNWM_MBUTTONUP

lParam参数的低位是鼠标的客户区x坐标,高位是客户区y坐标。wParam参数是指示鼠标键及ShiftCtrl键的状态。wParam&MK_SHIFTMK_CTRL,如果返回TRUE就意味着有按下ShiftCtrl键。

6 非客户区消息

wParam参数指明移动或者单击鼠标键的非客户区位置,以HT开头,lParam参数低位指出了鼠标所在屏幕坐标的x坐标,高位指出了鼠标所在屏幕坐标的y坐标。

7 鼠标轮滚动消息,WM_MOUSEWHEEL消息

lParam将获得鼠标的屏幕位置(坐标),wParam参数的低位表明鼠标键和ShiftCtrl键的状态。HIWORD(wParam)值可正可负,指出了滚轮导致屏幕滚动几行,是WHEEL_DELTA(120)的倍数

8 计时器消息WM_TIMER

wParam参数等于计时器的ID值,lParam0

9 按钮子窗口的WM_COMMAND消息

wParam参数的低位是子窗口ID,高位是通知码, lParam参数是子窗口句柄。

10 焦点消息,对于正在失去焦点的窗口,会收到WM_KILLFOCUS消息

其wParam参数是即将接收输入焦点的窗口的句柄。对于即将获取焦点的窗口,会收到WM_SETFOCUS消息,其wParam参数是正在失去焦点的窗口的句柄。

11 编辑控制的WM_COMMAND消息

wParam参数的低位是子窗口ID,高位是通知码,lParam参数是子窗口句柄。

12 列表框的WM_COMMAND消息

wParam参数的低位是子窗口ID,高位是通知码,lParam参数是子窗口句柄。

13 菜单消息1,WM_INITMENU

wParam是主菜单句柄,lParam是0.

14 菜单消息2,WM_MENUSELECT,菜单跟踪消息

其wParam参数的低位是选中项菜单的ID或者弹出式菜单的句柄,高位是选择标识,lParam参数是包含选中项的菜单句柄。

15 菜单消息3,WM_INITMENUPOPUP,准备显示一个弹出式菜单时产生的消息

wParam参数是弹出式菜单的句柄,lParam的低位是弹出式菜单的索引,如果该菜单是系统菜单,那么高位是1,否则为0.

16 菜单消息4,WM_COMMAND,选中菜单后产生

wParam低位是击中菜单的ID,高位是0,lParam参数也是0



当一个非系统键被按下时该消息发送给具有键盘焦点的窗口。非系统键即不与ALT联用的情况。

wParam为虚拟键码:WM_KEYDOWN

  lParam 的定义如下:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值