c00*_*0fd 4 c++ windows mfc dialog modal-dialog
我似乎无法找到一个有效的解决方案,当用户在键盘上点击ESC后,如何阻止基于对话框的MFC应用程序关闭.我一直在寻找代码,人们只是覆盖PreTranslateMessage通知并阻止所有WM_KEYDOWN消息VK_ESCAPE,但这对我不起作用,因为这种方法会阻止应用程序中的所有 ESC按键.因此,例如,当用户打开下拉列表并想要使用ESC键关闭它时,它也将被阻止.或者,如果某人打开弹出菜单或日期时间/日历控件并尝试使用ESC键击等来解除它,也会发生同样的情况.
所以我的问题是,如何防止ESC键击后我的对话框关闭?
Esc通过WM_COMMANDID 自动路由到您的对话框IDCANCEL.在dlgcore.cpp一个默认的处理程序将终止你的对话框(因此你的情况下的应用程序),如下所示:
void CDialog::OnCancel()
{
EndDialog(IDCANCEL);
}
Run Code Online (Sandbox Code Playgroud)
要阻止这种情况发生,只需IDCANCEL自己添加一个处理程序.例如,在对话框标题中添加方法签名:
afx_msg void OnCancelOverride();
Run Code Online (Sandbox Code Playgroud)
在对话框消息映射中,为IDCANCEL以下内容添加路由:
ON_COMMAND(IDCANCEL,OnCancelOverride)
Run Code Online (Sandbox Code Playgroud)
最后添加OnCancelOverride实现.如果Esc已关闭但此示例实现不会退出但允许退出系统菜单"关闭"选项.
void CMyDlg::OnCancelOverride()
{
// call base implementation if escape is not down
if((GetKeyState(VK_ESCAPE) & 0x8000)==0)
OnCancel();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1515 次 |
| 最近记录: |