如何在关闭对话框右上角那个叉叉之前作一些处理?

时间:2022-11-15 23:46:29
如何在关闭对话框右上角那个叉叉之前作一些处理?
比如跳出一个提示框,询问是否真正关闭程序?

6 个解决方案

#1


在WM_CLOSE消息的响应函数里处理。

#2


在OnSysCommand()里处理SC_CLOSE

#3


afx_msg void OnClose();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
...


BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
//{{AFX_MSG_MAP(CMixTestDlg)
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CXXXDlg::OnClose() 
{
// TODO: Add your message handler code here and/or call default

CDialog::OnClose();
}

#4


添加WM_DESTROY消息處理

#5


用OnSysCommand()函数来激活系统关闭命令.
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
// 截获定制的系统菜单消息
    if ((nID & 0xFFF0)==SC_COLSE)
MessageBox("确认退出?","系统提示",MB_ICONYESNO);
else CMDIFrameWnd::OnSysCommand(nID, lParam);
}

#6


用OnSysCommand()函数来截获系统关闭命令.
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
// 截获定制的系统菜单消息
    if ((nID & 0xFFF0)==SC_COLSE)
MessageBox("确认退出?","系统提示",MB_ICONYESNO);
else CMDIFrameWnd::OnSysCommand(nID, lParam);
}

#1


在WM_CLOSE消息的响应函数里处理。

#2


在OnSysCommand()里处理SC_CLOSE

#3


afx_msg void OnClose();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
...


BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
//{{AFX_MSG_MAP(CMixTestDlg)
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CXXXDlg::OnClose() 
{
// TODO: Add your message handler code here and/or call default

CDialog::OnClose();
}

#4


添加WM_DESTROY消息處理

#5


用OnSysCommand()函数来激活系统关闭命令.
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
// 截获定制的系统菜单消息
    if ((nID & 0xFFF0)==SC_COLSE)
MessageBox("确认退出?","系统提示",MB_ICONYESNO);
else CMDIFrameWnd::OnSysCommand(nID, lParam);
}

#6


用OnSysCommand()函数来截获系统关闭命令.
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
// 截获定制的系统菜单消息
    if ((nID & 0xFFF0)==SC_COLSE)
MessageBox("确认退出?","系统提示",MB_ICONYESNO);
else CMDIFrameWnd::OnSysCommand(nID, lParam);
}