先对要使用的类进行说明:
CMainDlg 主界面对话框
CChildDlg 子对话框(就是非模态弹出的对话框)
1.在CMainDlg.h中增加#include<ChildDlg.h>
2.在Public:下增加CChildDlg *m_pChildDlg;
3.在CMainDlg.cpp中初始化m_pChildDlg = NULL;
4.在主对话框按钮的单击事件中增加下面的代码
if(m_pChildDlg )
m_pChildDlg ->SetActiveWindow();
else
{
m_pChildDlg = new CAGCCfg();
m_pChildDlg ->Create(IDD_AGC_CFG,this);
m_pChildDlg ->ShowWindow(SW_SHOW);
m_pChildDlg ->CenterWindow();
}
5.在CChildDlg中增加
void CChildDlg ::PostNcDestroy()
{
delete this;
CDialog::PostNcDestroy();
}
void CChildDlg ::OnBnClickedCancel()
{
DestroyWindow();
}
写完上面的代码就可以让非模态对话框只能打开一个,但是还有一个问题,就是当这个非模态对话框关闭后,再打开的时候却发现打不开了,是什么原因呢?
调试一下就会发现,当子对话框关闭后,m_pChildDlg这个指针还没有赋空值
所以还要在修改第5步中的代码
void CAGCCfg::OnBnClickedCancel()
{
((CMainDlg *)GetParent())->m_pChildDlg= NULL;
DestroyWindow();
}
按照上面的步骤完成就可以实现只打开一个非模态对话框啦