WM_KEYFIRST 和 WM_KEYDOWN(均为 0x0100)的含义是什么?为什么它是 4 个十六进制数字长?

What's the meaning of WM_KEYFIRST and WM_KEYDOWN (both 0x0100)? And why it's 4 hex digits long?

是什么意思
#define WM_KEYFIRST 0x0100
#define WM_KEYDOWN  0x0100
#define WM_KEYUP 0x0101

?这些是 winuser.h 库中的第 1038、1039 和 1040 行。为什么这些值以及为什么 WM_KEYFIRSTWM_KEYDOWN 都与相同的值 0x0100 相关?使两个名称具有相同值的目的是什么?为什么它是 4 个十六进制数字长?请告诉我这个魔法!

WM_KEYFIRSTWM_KEYLAST定义了键盘相关消息的范围。这比将范围硬编码为 WM_KEYDOWNWM_UNICHAR 更容易记住,而且更便于携带,因为例如 WM_KEYLAST 而不是 WM_UNICHAR 之前 Windows XP.

例如,下面将过滤与键盘相关的消息。

for(MSG msg; PeekMessage(&msg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE); ) { ... }

这实际上在 PeekMessage 文档中有特别说明。

wMsgFilterMin - Type: UINT - The value of the first message in the range of messages to be examined. Use WM_KEYFIRST (0x0100) to specify the first keyboard message or WM_MOUSEFIRST (0x0200) to specify the first mouse message.

wMsgFilterMax - Type: UINT - The value of the last message in the range of messages to be examined. Use WM_KEYLAST to specify the last keyboard message or WM_MOUSELAST to specify the last mouse message.