在网上看了很多文章都没看到明确的如何解决这一问题,在自己了解MFC消息机制后通过实践得出如何解决方法:
在子窗口中重载OnCancel(),并在子窗口中注册WM_CLOSE消息的处理函数为OnCancle(),在OnCancel()函数中实现父窗口的关闭即可;
例如:
class CLoginDlg : public CDialog
{ ///父窗口
…………
m_MainWndDlg;
}
void CLoginDlg::OnBnClickedButton1()
{
m_MainWndDlg = new CMainWndDlg(this);
m_MainWndDlg->Create(IDD_DIALOG_MainWnd,this);
m_MainWndDlg->ShowWindow(SW_MAXIMIZE);
///模态窗口处理相同
}
class CMainWndDlg : public CDialog
{
public:
afx_msg void OnCancel(); ///重载OnCancel()函数
private:
Cwnd* m_F;
}
BEGIN_MESSAGE_MAP(CMainWndDlg, CDialog)
ON_WM_SYSCOMMAND(WM_CLOSE,&&CMainWndDlg::OnCancel())
……
……
END_MESSAGE_MAP()
CMainWndDlg::CMainWndDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMainWndDlg::IDD, pParent)
{
m_F =pParent;///保存父窗口指针
}
void CMainWndDlg::OnCancel(void)处理函数
{
m_F->DestroyWindow();
exit(0);
}