【问题标题】:MFC: Dialog PreTranslateMessage() WM_KEYDOWN not seeing VK_DELETE?MFC:对话框 PreTranslateMessage() WM_KEYDOWN 没有看到 VK_DELETE?
【发布时间】:2020-05-09 18:28:43
【问题描述】:

我有一个奇怪的方法,我得到了所有其他虚拟键,但没有收到VK_DELETE?这是一个 MFC 应用程序,基于 CDialogEx。我在PreTranslateMessage() 中检查它

    if (pMsg->wParam==VK_SPACE) {
      // do my stuff - WORKS!
    }
    else if (pMsg->wParam==VK_INSERT) {
      // do my stuff - WORKS!
      draw=true;
    }
    else if (pMsg->wParam==VK_DELETE) {
      // do my stuff - NEVER RECEIVED!!
    }
    else ... etc ...

我从上面的代码中复制/粘贴,以确保 if 语句中没有我看不见的东西。

有什么想法吗?

TIA!!

【问题讨论】:

  • 不希望听起来有侮辱性,但您是否检查过(例如在文本编辑器中)您的删除键确实有效?
  • 是的,它有效,在这里和任何地方都可以使用它。也试过数字键盘上的那个,还是没有断点,也没有动作。在项目中搜索 VK_DELETE 发现它是其他东西的加速器(未激活/未显示),但在 F6 和 F7 的位置,所以我尝试了 VK_F6 并且效果很好,因此与此无关。
  • 嗯。我在我的一个项目中尝试过,插入代码来拦截 VK_DELETE 和 VK_SPACE(发出不同的哔声),它工作正常。 (我有一个从 CDialogEx 派生的对话类,它已经覆盖了 PreTranslateMessage() 并为其他键处理 WM_KEYDOWN。)

标签: winapi mfc


【解决方案1】:

好的,所以找到VK_DELETE 是一个加速器并且VK_F6 也是,使用VK_F6 工作,但仔细观察加速器VK_F6CONTROL,删除它所以就像VK_DELETE有同样的问题,所以这类问题与加速器有关。

我使用的解决方法是添加一个禁用选项,这样就不会从另一个主窗口的PretranslateMessage() 调用TranslateAccelerator()。这允许将按下的键发送到对话框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多