如何处理Ctrl + X快捷键

时间:2011-05-09 19:40:52

标签: c winapi

当我同时按 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;

2 个答案:

答案 0 :(得分:3)

最好使用加速器处理此类键盘操作,而不是处理低级按键事件。

答案 1 :(得分:1)

加速器通常用于应用程序级命令 - 例如。 Ctrl-N 打开一个新文档。如果此键组合特定于此HWND - 例如。如果它是一个特定于控件的键盘命令,那么在控件中处理它是可行的方法。

我猜你的代码中发生的事情如下:当你按Ctrl + Enter时,Windows会生成两条WM_KEYDOWN条消息;一个用于 CTRL ,另一个用于ENTER。当你得到 CTRL 的那个时,你会显示消息框,现在它的内部消息循环接管了 - 它将被取消任何进一步的输入,直到它被解除。

尝试删除第一个MessageBox(你知道你无论如何都要点击那个点),然后看看第二个是否被击中。或者使用一些不会干扰输入的诊断输出技术(例如OutputDebugString())。