仅响应第一个WM_KEYDOWN通知?

Nic*_*unt 4 c windows winapi notifications

Win32应用程序如何只响应第一个WM_KEYDOWN通知?MSDN文档声明位30"指定先前的密钥状态.如果密钥在发送消息之前关闭,则值为1,如果密钥已启动则为零." 但在我的WndProc中,第30位始终为0.

case WM_KEYDOWN:
    // ToDo - stop multiple notifications for repeating keys
    printf("WM_KEYDOWN %i %i", wParam, lParam & 30);
    return 0;
Run Code Online (Sandbox Code Playgroud)

请问lParam&30是错误的方式吗?我做错了什么吗?

sha*_*oth 11

要测试第30位,请不要使用30与AND,而是使用1 << 30.

const bool isBitSet = lParam & (1 << 30);
Run Code Online (Sandbox Code Playgroud)

  • VC++ 7正在将其优化为恒定值. (2认同)