MFC:对话框 PreTranslateMessage() WM_KEYDOWN 没有看到 VK_DELETE?

Posted

技术标签:

【中文标题】MFC:对话框 PreTranslateMessage() WM_KEYDOWN 没有看到 VK_DELETE?【英文标题】:MFC: Dialog PreTranslateMessage() WM_KEYDOWN not seeing 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。) 【参考方案1】:

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

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

【讨论】:

以上是关于MFC:对话框 PreTranslateMessage() WM_KEYDOWN 没有看到 VK_DELETE?的主要内容,如果未能解决你的问题,请参考以下文章

MFC的基本对话框怎么画图?

MFC 如何将一个对话框嵌入到视图中

MFC 怎么使对话框充满窗口

mfc 单文档 多文档 对话框 区别

mfc中怎样在一个基于对话框程序中添加菜单栏 急。。。!

mfc 对话框 改变大小