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_F6
有CONTROL
,删除它所以就像VK_DELETE
有同样的问题,所以这类问题与加速器有关。
我使用的解决方法是添加一个禁用选项,这样就不会从另一个主窗口的PretranslateMessage()
调用TranslateAccelerator()
。这允许将按下的键发送到对话框。
【讨论】:
以上是关于MFC:对话框 PreTranslateMessage() WM_KEYDOWN 没有看到 VK_DELETE?的主要内容,如果未能解决你的问题,请参考以下文章