如何防止在按ESC键后关闭基于MFC对话框的应用程序,而是允许其他控件对其进行处理?

c00000fd

我似乎找不到有效的解决方案,如何在用户按键盘上的ESC后阻止基于对话框的MFC应用程序关闭。我一直在寻找代码,使人们仅重写PreTranslateMessage通知并阻止的所有WM_KEYDOWN消息VK_ESCAPE,但这对我不起作用,因为这种方法会阻止应用程序中的所有ESC按键。因此,例如,当用户打开一个下拉列表并希望使用ESC键将其关闭时,该列表也会被阻止。或者,如果有人打开弹出菜单或日期时间/日历控件,并尝试使用ESC按键将其关闭,也会发生同样的情况。

所以我的问题是,如何防止在ESC按键后对话框关闭?

安迪·布朗

Esc会自动通过WM_COMMANDID路由到您的对话框IDCANCELdlgcore.cpp其中有一个默认处理程序,它将终止您的对话框(并因此终止您的应用程序),如下所示:

void CDialog::OnCancel()
{
    EndDialog(IDCANCEL);
}

要阻止这种情况发生,只需IDCANCEL自己添加一个处理程序即可。例如,在对话框标题中添加方法签名:

afx_msg void OnCancelOverride();

在您的对话框消息映射中,添加以下路由IDCANCEL

ON_COMMAND(IDCANCEL,OnCancelOverride)

最后添加OnCancelOverride执行。如果Esc关闭,此示例实现不会退出,但允许从系统菜单的“关闭”选项退出。

void CMyDlg::OnCancelOverride() 
{
  // call base implementation if escape is not down

  if((GetKeyState(VK_ESCAPE) & 0x8000)==0)
    OnCancel();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

基于 MFC 对话框的应用程序无法两次调用对话框

来自分类Dev

如何在基于对话框的MFC应用程序上启用滚动?

来自分类Dev

关闭模态对话框后应用程序退出

来自分类Dev

如果手机在关闭应用程序时收到通知,如何触发“弹出窗口,对话框,应用程序栏或其他嵌入式元素”?

来自分类Dev

移动应用程序如何防止当我在此对话框外单击时未关闭确认框

来自分类Dev

如何在基于MFC对话框的应用程序中捕获复选框的MouseMove事件?

来自分类Dev

Chocolatey无法安装应用程序,“您如何打开此文件?” 而是打开对话框

来自分类Dev

在关闭对话框后再次打开对话框时,应用程序崩溃并给出“ java.lang.IllegalStateException”

来自分类Dev

Ms BotBuilder:firstRun 对话框防止触发基于 LUIS 意图的其他对话框

来自分类Dev

使用文件打开对话框后,Qt应用程序将焦点切换到其他应用程序

来自分类Dev

关闭共享对话框后导航回应用程序

来自分类Dev

关闭共享对话框后导航回应用程序

来自分类Dev

当对话框的ShowInTaskBar = false时,如何通过任务栏关闭应用程序或模式对话框?

来自分类Dev

当对话框的ShowInTaskBar = false时,如何通过任务栏关闭应用程序或模式对话框?

来自分类Dev

如何在C ++中从控制台应用程序显示MFC对话框?

来自分类Dev

如何在MFC应用程序中动态创建对话框?

来自分类Dev

如何在C ++中从控制台应用程序显示MFC对话框?

来自分类Dev

如何在 MFC Dialog 应用程序中插入更多对话框?

来自分类Dev

片段对话框使应用程序崩溃,还有其他解决方法吗?

来自分类Dev

片段对话框使应用程序崩溃,还有其他解决方法吗?

来自分类Dev

如何创建一个类似组件的对话框,允许在其中放置其他控件?

来自分类Dev

MODERN-对话框无法在ESC键上关闭

来自分类Dev

关闭起始子对话框并进入父对话框后,我的 qt 桌面应用程序不断崩溃

来自分类Dev

如何防止Unity抓取键绑定(允许应用程序首先处理它们)?

来自分类Dev

如何防止Unity抓取键绑定(允许应用程序首先处理它们)?

来自分类Dev

如何从终端打开“运行应用程序”对话框?

来自分类Dev

如何使用控制台应用程序获取输出并将其显示到MFC对话框中StaticText

来自分类Dev

如何在不打开Safari或任何其他浏览器的情况下在我的应用程序中起诉Facebook SDK登录对话框?

来自分类Dev

关闭WPF模态窗口后如何将MFC对话框置于前台

Related 相关文章

  1. 1

    基于 MFC 对话框的应用程序无法两次调用对话框

  2. 2

    如何在基于对话框的MFC应用程序上启用滚动?

  3. 3

    关闭模态对话框后应用程序退出

  4. 4

    如果手机在关闭应用程序时收到通知,如何触发“弹出窗口,对话框,应用程序栏或其他嵌入式元素”?

  5. 5

    移动应用程序如何防止当我在此对话框外单击时未关闭确认框

  6. 6

    如何在基于MFC对话框的应用程序中捕获复选框的MouseMove事件?

  7. 7

    Chocolatey无法安装应用程序,“您如何打开此文件?” 而是打开对话框

  8. 8

    在关闭对话框后再次打开对话框时,应用程序崩溃并给出“ java.lang.IllegalStateException”

  9. 9

    Ms BotBuilder:firstRun 对话框防止触发基于 LUIS 意图的其他对话框

  10. 10

    使用文件打开对话框后,Qt应用程序将焦点切换到其他应用程序

  11. 11

    关闭共享对话框后导航回应用程序

  12. 12

    关闭共享对话框后导航回应用程序

  13. 13

    当对话框的ShowInTaskBar = false时,如何通过任务栏关闭应用程序或模式对话框?

  14. 14

    当对话框的ShowInTaskBar = false时,如何通过任务栏关闭应用程序或模式对话框?

  15. 15

    如何在C ++中从控制台应用程序显示MFC对话框?

  16. 16

    如何在MFC应用程序中动态创建对话框?

  17. 17

    如何在C ++中从控制台应用程序显示MFC对话框?

  18. 18

    如何在 MFC Dialog 应用程序中插入更多对话框?

  19. 19

    片段对话框使应用程序崩溃,还有其他解决方法吗?

  20. 20

    片段对话框使应用程序崩溃,还有其他解决方法吗?

  21. 21

    如何创建一个类似组件的对话框,允许在其中放置其他控件?

  22. 22

    MODERN-对话框无法在ESC键上关闭

  23. 23

    关闭起始子对话框并进入父对话框后,我的 qt 桌面应用程序不断崩溃

  24. 24

    如何防止Unity抓取键绑定(允许应用程序首先处理它们)?

  25. 25

    如何防止Unity抓取键绑定(允许应用程序首先处理它们)?

  26. 26

    如何从终端打开“运行应用程序”对话框?

  27. 27

    如何使用控制台应用程序获取输出并将其显示到MFC对话框中StaticText

  28. 28

    如何在不打开Safari或任何其他浏览器的情况下在我的应用程序中起诉Facebook SDK登录对话框?

  29. 29

    关闭WPF模态窗口后如何将MFC对话框置于前台

热门标签

归档