如何通过按ESC(退出键)停止mfc对话框应用程序关闭。 如果我按ESC键执行我的应用程序后,窗口关闭。 怎么能停止? 我使用的是VC ++ 6.0。
答案 0 :(得分:4)
如果IDCANCEL是焦点项目,您可以覆盖OnCancel事件并仅使用OnCancel调用继续前进。
void CMyDialog::OnCancel(void)
{
if(GetDlgItem(IDCANCEL) == GetFocus())
{
CDialog::OnCancel();
return;
}
}
答案 1 :(得分:2)
有不同的方法可以做到这一点。你可以:
答案 2 :(得分:1)
覆盖OnCancel并且不调用基类实现。
除非你知道自己在做什么,否则不要靠近OnClose,否则你可能会破坏Alt-F4和X按钮的行为。
我一直认为PreTranslateMessage就像使用热核武器来破解坚果一样,但如果它漂浮在你的船上......
答案 3 :(得分:0)
假设我们在这里处理的是作为CDialog子类实现的顶级窗口,那么该窗口可以接收两种“种类”的关闭事件:
MFC在发送到对话框时默认情况下有效地将前一类事件通过CDialog :: OnCancel进行路由,这意味着重写OnCancel 也会破坏Alt-F4和X按钮。这意味着,为了区分两者,您需要在OnSysCommand中处理前一个事件,同时使用OnOK和OnCancel的替代来处理后者。
结果代码如下:
class CTopLevelDlg: public CDialog
{
afx_win void OnSysCommand(UINT id, LPARAM lparam) override
{
if (id == SC_CLOSE)
CDialog::OnCancel();
}
void OnOK() override {}
void OnCancel() override {}
};