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_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); ) { ... }
这实际上在 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.
#define WM_KEYFIRST 0x0100
#define WM_KEYDOWN 0x0100
#define WM_KEYUP 0x0101
?这些是 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); ) { ... }
这实际上在 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.