当我同时按 Ctrl + Enter 时,我会收到第一个消息框但不会收到第二个消息框。我该如何解决这个问题?
case WM_KEYDOWN:
if (GetKeyState(VK_CONTROL) & 0x8000) {
MessageBox(0, "Ctrl", "Key", 0);
switch (wParam) {
case VK_RETURN:
MessageBox(0, "Enter", "Key", 0);
break;
}
}
break;
答案 0 :(得分:3)
最好使用加速器处理此类键盘操作,而不是处理低级按键事件。
答案 1 :(得分:1)
加速器通常用于应用程序级命令 - 例如。 Ctrl-N 打开一个新文档。如果此键组合特定于此HWND
- 例如。如果它是一个特定于控件的键盘命令,那么在控件中处理它是可行的方法。
我猜你的代码中发生的事情如下:当你按Ctrl + Enter时,Windows会生成两条WM_KEYDOWN
条消息;一个用于 CTRL ,另一个用于ENTER。当你得到 CTRL 的那个时,你会显示消息框,现在它的内部消息循环接管了 - 它将被取消任何进一步的输入,直到它被解除。
尝试删除第一个MessageBox
(你知道你无论如何都要点击那个点),然后看看第二个是否被击中。或者使用一些不会干扰输入的诊断输出技术(例如OutputDebugString()
)。