什么意思
#define WM_KEYFIRST 0x0100
#define WM_KEYDOWN 0x0100
#define WM_KEYUP 0x0101
Run Code Online (Sandbox Code Playgroud)
? 这些是winuser.h库中的第1038、1039 和 1040 行。为什么这些值以及为什么WM_KEYFIRST和WM_KEYDOWN两者都与相同的值有关0x0100?将两个名称设为相同值的目的是什么?为什么它是 4 个十六进制数字?请告诉我这个魔法!
的WM_KEYFIRST到WM_KEYLAST键盘相关的消息的定义的范围内。这比硬编码的范围像更容易记住WM_KEYDOWN到WM_UNICHAR,也更便于携带,因为例如WM_KEYLAST是没有 WM_UNICHAR的Windows XP之前。
例如,下面将过滤与键盘相关的消息。
for(MSG msg; PeekMessage(&msg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE); ) { ... }
Run Code Online (Sandbox Code Playgroud)
这实际上在PeekMessage文档中特别指出。
wMsgFilterMin - 类型:UINT - 要检查的消息范围中的第一条消息的值。使用 WM_KEYFIRST (0x0100) 指定第一条键盘消息或使用 WM_MOUSEFIRST (0x0200) 指定第一条鼠标消息。
wMsgFilterMax - 类型:UINT - 要检查的消息范围中的最后一条消息的值。使用 WM_KEYLAST 指定最后一个键盘消息或使用 WM_MOUSELAST 指定最后一个鼠标消息。