我似乎无法找到一个有效的解决方案,当用户在键盘上点击ESC后,如何阻止基于对话框的MFC应用程序关闭。我一直在查找人们只是覆盖PreTranslateMessage
次通知的代码,并屏蔽WM_KEYDOWN
的所有VK_ESCAPE
条消息,但这对我不起作用,因为此方法会阻止所有在应用程序中按ESC键。因此,例如,当用户打开下拉列表并想要使用ESC键关闭它时,它也将被阻止。或者,如果有人打开弹出菜单或日期时间/日历控件并尝试使用ESC键击等解除它,也会发生同样的情况。
所以我的问题是,如何在ESC键击后阻止仅我的对话关闭?
答案 0 :(得分:6)
Esc
会自动通过身份WM_COMMAND
的{{1}}路由到您的对话框。在IDCANCEL
中有一个默认的处理程序将终止你的对话框(因此在你的情况下是应用程序),如下所示:
dlgcore.cpp
要阻止这种情况发生,只需自行添加void CDialog::OnCancel()
{
EndDialog(IDCANCEL);
}
处理程序即可。例如,在对话框标题中添加方法签名:
IDCANCEL
在对话框消息地图中,为afx_msg void OnCancelOverride();
添加路由:
IDCANCEL
最后添加ON_COMMAND(IDCANCEL,OnCancelOverride)
实现。如果OnCancelOverride
关闭但是允许退出系统菜单“关闭”选项,则此示例实现不会退出。
Esc
答案 1 :(得分:0)
ON_WM_CLOSE()
添加到消息地图中,以便您可以通过点击右上方的X按钮退出应用。afx_msg void OnClose ()
。
afx_msg void CDialogXXX::OnClose ()
{
PostQuitMessage (0) ;
CDialog::OnClose () ;
}