是这样的,我一个主对话框里面点一个按钮后建立一个无模式对话框,但是我希望只打开一次这个无模式对话框.
也就是说这个无模式对话框如果没建立或者关掉了我就重新建立,否则我就不建立.
    有一个方法是子对话框在销毁的时候发送消息给父对话框,但是这样比较麻烦,还得自定义消息(太多自定义消息以后又怕不小心和系统消息冲突),还得在父窗口进行消息映射.
    有没办法通过判断建立这个无模式对话框的指针来判断?我试过如果通过判断这个指针是否为NULL的话在自对话框关掉的时候会出错.  或者有没有别的简单的办法直接在父对话框判断子对话框是否关闭?

解决方案 »

  1.   

    主对话框里面或者设置一个全局变量
    子对话框create出来,加1
    destroy后减1
    然后就可以判断
      

  2.   

    建立无模式对话框时把主对话框指针作为父窗口传下来。
    子对话框建立的时候将主对话框上面的建立按钮变灰。子对话框销毁时重新enable这个按钮。
      

  3.   

    在主对话框的.h里加#include "TestDlg.h"(CTestDlg是无模式对话框的类)
    先定义个全局的无模式对话框的指针,如CTestDlg *m_dlg;
    在构造里把m_dlg=NULL;
    在你要产生的按钮事件里

    if(m_dlg==NULL)
    {
      m_dlg=new CTestDlg ();
      m_dlg->creat(无模式对话框的ID);
    }
      m_dlg->ShowWindow(true);
      

  4.   

    其实我主要是希望一个比较通用的程序,你这样是要在子窗口里面把这个指针设为NULL吧?
      

  5.   

    if(m_dlg==NULL) 

      m_dlg=new CTestDlg (); 
      m_dlg->creat(无模式对话框的ID); 

      m_dlg->ShowWindow(true); 
    有没有办法像上面这样通过判断建立对话框的那个指针来判断是否关掉,
    但是要是子对话框销毁的时候没有把m_dlg设为NULL的话,上面那个判断会出错.
      

  6.   

    我是在主窗口的按钮函数里掉的创建无模式对话框
    在主窗口的构造里把m_dlg=NULL;
    你创建了无模式对话框后m_dlg!=NUll了。
    那就不会再创建新的无模式对话框
    当你关闭无模式对话框后m_dlg就是NULL了
      

  7.   

    你可以再主窗口重载ON DESTROY中把
    if(m_dlg!=NULL)
    {
    delete m_dlg;
    }
      

  8.   


    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了,事实上也已经跳到那边去了
      

  9.   

    给你一段以前写的,用过没有问题,不过和你上面的差不多在窗口外部你只能用窗口句柄来判断这个窗口是否已经销毁
    至于你说你已经删掉那个窗口,但是句柄不为空,那就是你窗口关闭有问题
    非模态的窗口销毁需要调用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);
    }