我开始使用 c++ 语言学习 winapi。我试图理解lParam
on WM_KEYDOWN 消息。
从微软文档:
0-15:当前消息的重复计数。该值是由于用户按住键而自动重复击键的次数。如果击键时间足够长,则会发送多条消息。但是,重复计数不是累积的。
16-23:扫码。该值取决于 OEM。
24:指示该键是否为扩展键,例如出现在增强的 101 或 102 键键盘上的右手 ALT 和 CTRL 键。如果是扩展键,则值为 1;否则为 0。
25-28:保留;不使用。
29:上下文代码。对于 WM_KEYDOWN 消息,该值始终为 0。
30:前一个键状态。如果在发送消息之前密钥已关闭,则该值为 1,如果密钥已启动,则该值为 0。
31:过渡状态。对于 WM_KEYDOWN 消息,该值始终为 0。
我正在通过这种方式处理此消息:
case WM_KEYDOWN:
cout << ((lParam & 0b11111111111111110000000000000000) >> 16) << ", ";
cout << ((lParam & 0b00000000000000001111111100000000) >> 8) << ", ";
cout << ((lParam & 0b00000000000000000000000010000000) >> 7) << ", ";
cout << ((lParam & 0b00000000000000000000000000000100) >> 2) << ", ";
cout << ((lParam & 0b00000000000000000000000000000010) >> 1) << ", ";
cout << ((lParam & 0b00000000000000000000000000000001) >> 0) << endl;
如果我按下键盘上的“A”按钮,我会得到输出:
30, 0, 0, 0, 0, 1
如果我按住“A”按钮,我会得到多个输出:
16414, 0, 0, 0, 0, 1
16414, 0, 0, 0, 0, 1
16414, 0, 0, 0, 0, 1
如果我按其他字母按钮,我会得到相同的结果,但有其他第一个数字。(例如,对于“B”按钮,我得到 48 作为简单的按下,49200 作为保持)
我怎么理解?