如何通过按 ESC(Escape 键)来停止关闭 mfc 对话框应用程序。执行我的应用程序后,如果我按 ESC 键,则窗口将关闭。这怎么能阻止?我正在使用 VC++ 6.0。
roshan
问问题
1714 次
4 回答
4
您可以覆盖 OnCancel 事件,并且仅在 IDCANCEL 是焦点项时继续使用 OnCancel 调用。
void CMyDialog::OnCancel(void)
{
if(GetDlgItem(IDCANCEL) == GetFocus())
{
CDialog::OnCancel();
return;
}
}
于 2009-06-16T10:35:57.223 回答
1
覆盖 OnCancel 并且不调用基类实现。
除非您知道自己在做什么,否则不要靠近 OnClose,否则可能会破坏 Alt-F4 和 X 按钮的行为。
我一直认为 PreTranslateMessage 这样的事情是使用热核武器来破解坚果,但如果它漂浮你的船......
于 2009-06-16T21:38:47.167 回答
0
假设我们在这里处理一个作为 CDialog 子类实现的顶级窗口,该窗口可以接收两种“类型”的关闭事件:
- 应用程序关闭事件(ID 为 SC_CLOSE 的 WM_SYSCOMMAND)
- 窗口关闭事件(ID 为 IDOK 或 IDCANCEL 的 WM_COMMAND)
然而,当前一类事件被发送到对话框时,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 {}
};
于 2019-06-21T15:56:46.283 回答