16,472
社区成员
发帖
与我相关
我的任务
分享
B* pDlg;
pDlg = new B();
//B pDlg;
pDlg->Create(IDD_DIALOG_LOGIN,this);
pDlg->ShowWindow(SW_SHOW);
BOOL A::DestroyWindow()
{
// TODO: 在此添加专用代码和/或调用基类
delete pDlg;
pDlg = NULL;
return CDialogEx::DestroyWindow();
}
void B::OnBnClickedBnCancel()
{
CDialogEx::OnCancel();
AfxGetMainWnd()->PostMessageA(WM_CLOSE);
//AfxGetApp()->GetMainWnd()->PostMessageA(WM_CLOSE);
}
class A;//声明A
//需要关闭的地方
A dlg;
dlg.pDlg=NULL;//pDlg是父对话框中声明的B的指针
DestroyWindow();
//重载B PostNcDestroy()消息
void B::PostNcDestroy()
{
CDialogEx::PostNcDestroy();
delete this;
}
class B;//声明B
//需要关闭的地方
B dlg;
dlg.pDlg=NULL;//pDlg是父对话框中声明的B的指针
DestroyWindow();
//重载B PostNcDestroy()消息
void B::PostNcDestroy()
{
CDialogEx::PostNcDestroy();
delete this;
}
CXMLParseDlg dlg;
m_pMainWnd = &dlg;
//INT_PTR nResponse = dlg.DoModal();
INT_PTR nResponse = dlg.Create(CXMLParseDlg::IDD);
dlg.ShowWindow(SW_HIDE);
dlg.RunModalLoop();
// DlgTest10Dlg.h : header file
#include "SubDlg.h"
class CDlgTest10Dlg : public CDialog
{
public:
CSubDlg m_SubDlg;
void ParentProcessSubClose(UINT nID);
protected:
afx_msg void OnShowhideSub();
……
};
// DlgTest10Dlg.cpp : implementation file
BEGIN_MESSAGE_MAP(CDlgTest10Dlg, CDialog)
//{{AFX_MSG_MAP(CDlgTest10Dlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_SHOWHIDE_SUB, OnShowhideSub)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//显示/隐藏子窗口
void CDlgTest10Dlg::OnShowhideSub()
{
// TODO: Add your control notification handler code here
if(m_SubDlg.m_hWnd == NULL)
{
if(m_SubDlg.Create(this))
{
m_SubDlg.ShowWindow(SW_SHOW);
}
}
else
{
m_SubDlg.DestroyWindow();
m_SubDlg.m_bModelessCreate = FALSE;
}
}
//处理子窗口关闭
void CDlgTest10Dlg::ParentProcessSubClose(UINT nID)
{
if(m_SubDlg.m_hWnd)
{
m_SubDlg.DestroyWindow();
}
CString szMsg;
szMsg.Format(_T("Sub dialog select %u"), nID);
AfxMessageBox(szMsg);
}
// SubDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CSubDlg dialog
class CSubDlg : public CDialog
{
public:
virtual BOOL Create(CWnd* pParentWnd);
BOOL m_bModelessCreate;
protected:
virtual void OnOK();
virtual void OnCancel();
void EndMyDialog(int nResult);
……
};
CSubDlg::CSubDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSubDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSubDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_bModelessCreate = FALSE; //初始化非模态指示
}
// CSubDlg message handlers
BOOL CSubDlg::Create(CWnd* pParentWnd)
{
m_bModelessCreate = TRUE; //非模态方式创建
return CDialog::Create(m_lpszTemplateName, pParentWnd);
}
#include "DlgTest10Dlg.h"
void CSubDlg::EndMyDialog(int nResult)
{
CDlgTest10Dlg *pDlg = (CDlgTest10Dlg*)GetParent();
if(m_bModelessCreate && pDlg) //非模态方式关闭
{
pDlg->ParentProcessSubClose(nResult); //调用父类处理关闭
}
else
{
EndDialog(nResult); //结束模态对话框
}
m_bModelessCreate = FALSE; //清除非模态标记
}
void CSubDlg::OnOK()
{
EndMyDialog(IDOK);
}
void CSubDlg::OnCancel()
{
EndMyDialog(IDCANCEL);
}