【问题标题】:How to handle Ctrl+X shortcut keys如何处理 Ctrl+X 快捷键
【发布时间】:2011-05-09 19:40:51
【问题描述】:

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

【问题讨论】:

  • 您应该使用加速键来处理此类键盘操作
  • 谢谢!不幸的是,我无法在此处将您的答案标记为已接受...
  • 好的,有答案让你接受!我没有先写它作为答案,因为我不确定您是否会接受另一种方法 - 不是每个人都接受!

标签: c winapi


【解决方案1】:

与其处理低级按键事件,不如使用加速键处理此类键盘操作。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多