2017年5月22日星期一

WM_KEYDOWN

# WM_KEYDOWN

当按下非系统键时(系统键一般指的是Alt没有被按下时产生的键盘消息),消息被派发至键盘焦点的窗口。

一个窗口通过 WindowProc 函数接收该消息.
```c
LRESULT CALLBACK WindowProc(
  HWND hwnd,       // handle to window
  UINT uMsg,       // WM_KEYDOWN
  WPARAM wParam,   // virtual-key code
  LPARAM lParam    // key data
);
```
## 参数
![4711d3eb32fe92b09a59a9e321f6cb15](/assets/4711d3eb32fe92b09a59a9e321f6cb15.png)
### wParam
     指定非系统键的虚拟键码。
### lParam
    指定重复次数,扫描码,扩展键标志,内容码,之前键状态标志,改变状态标志,如下表所示。
    

## 返回值

如果处理了该消息,返回值则为0.
## 备注

如果按了F10,DefWindowProc函数会设置一个内部标志。当DefWindowProc收到WM_KEYUP消息时,该函数会检查是否设置了内部标志,如果是,就会发送一个WM_SYSCOMMAND消息给顶层窗口。该消息的wParam参数会被设置为SC_KEYMENU。

由于自动重复的特性,在WM_KEYUP被派发出去之前,WM_KEYDOWN可能已经被派发好几次了。那么30位上的标志位则可以用于决定哪个WM_KEYDOWN是第一次发送过来的。

对于101-102键键盘,扩展键在主区域部分的只有Alt和Ctrl;INS,DEL,HOME,END,PAGE UP,PAGE DOWN;在数字小键盘上的方向键;除号(/),数字小键盘上的回车;其他的键盘可能支持lParam参数的扩展键盘位(24位)。

Windows 2000/XP: 程序必须按原样传递wParam参数给TranslateMessage中。

没有评论:

发表评论