是这样的,我一个主对话框里面点一个按钮后建立一个无模式对话框,但是我希望只打开一次这个无模式对话框.
也就是说这个无模式对话框如果没建立或者关掉了我就重新建立,否则我就不建立.
有一个方法是子对话框在销毁的时候发送消息给父对话框,但是这样比较麻烦,还得自定义消息(太多自定义消息以后又怕不小心和系统消息冲突),还得在父窗口进行消息映射.
有没办法通过判断建立这个无模式对话框的指针来判断?我试过如果通过判断这个指针是否为NULL的话在自对话框关掉的时候会出错. 或者有没有别的简单的办法直接在父对话框判断子对话框是否关闭?
也就是说这个无模式对话框如果没建立或者关掉了我就重新建立,否则我就不建立.
有一个方法是子对话框在销毁的时候发送消息给父对话框,但是这样比较麻烦,还得自定义消息(太多自定义消息以后又怕不小心和系统消息冲突),还得在父窗口进行消息映射.
有没办法通过判断建立这个无模式对话框的指针来判断?我试过如果通过判断这个指针是否为NULL的话在自对话框关掉的时候会出错. 或者有没有别的简单的办法直接在父对话框判断子对话框是否关闭?
子对话框create出来,加1
destroy后减1
然后就可以判断
子对话框建立的时候将主对话框上面的建立按钮变灰。子对话框销毁时重新enable这个按钮。
先定义个全局的无模式对话框的指针,如CTestDlg *m_dlg;
在构造里把m_dlg=NULL;
在你要产生的按钮事件里
加
if(m_dlg==NULL)
{
m_dlg=new CTestDlg ();
m_dlg->creat(无模式对话框的ID);
}
m_dlg->ShowWindow(true);
{
m_dlg=new CTestDlg ();
m_dlg->creat(无模式对话框的ID);
}
m_dlg->ShowWindow(true);
有没有办法像上面这样通过判断建立对话框的那个指针来判断是否关掉,
但是要是子对话框销毁的时候没有把m_dlg设为NULL的话,上面那个判断会出错.
在主窗口的构造里把m_dlg=NULL;
你创建了无模式对话框后m_dlg!=NUll了。
那就不会再创建新的无模式对话框
当你关闭无模式对话框后m_dlg就是NULL了
if(m_dlg!=NULL)
{
delete m_dlg;
}
if(m_dlg!=NULL)
{
if(IsWindow(m_lg->m_hWnd))
{
m_dlg->SetFocus();
return;
}
}
m_dlg=new CXXDlg;
m_dlg->Create(IDD_SORT_DIALOG,this);
m_dlg->ShowWindow(SW_SHOW);
事实上我是这样写的,很奇怪一点,就是销毁窗口后m_lg->m_hWnd这个还能得到,而且是我已经在子窗口里面delete this了,事实上也已经跳到那边去了
至于你说你已经删掉那个窗口,但是句柄不为空,那就是你窗口关闭有问题
非模态的窗口销毁需要调用destroywindow的,你的问题很有可能是窗口关闭时没有正确销毁窗口
if ( m_pDlg != NULL && m_pDlg->m_hWnd == NULL )
{
delete m_pDlg;
m_pDlg = NULL;
}
if ( m_pDlg == NULL )
{
m_dlg=new CXXDlg;
m_dlg->Create(IDD_SORT_DIALOG,this);
m_dlg->ShowWindow(SW_SHOW);
}