在程序中有对话框A与对话框B.(A为父B为子)
打开程序进入A对话框,点对话框中的【进入】按钮进入B对话框,发现B对话框打开的时候,A对话框没有关闭,如何关闭呢?
A中【进入】按钮代码
CB dlg;
dlg.DoModal();我要返回多次进入B对话框,就是关闭B对话框,此时为A对话框,在点进入B对话框,在不关闭主程序时候,多次进入的B的话,发现内存有增长的情况,如何释放呢?

解决方案 »

  1.   

    CB dlg;
    dlg.DoModal();
    有没有动态申请,都是的栈上怎么会泄漏?
      

  2.   

    没有其它多余的操作,就在MFC程序中建立了两个对话框,反复打开B关闭B。原来那个程序多次进入B对话框后,比如10次以上,发现对话框刷新开始缓慢,所以就研究是不是资源没有释放,结果发现多次进入对话框有内存泄露的嫌疑。
      

  3.   

    有可能dlg上有动态申请没释放吧
      

  4.   

    A和B都用非模态对话框
    A中OnEnter
    B* b = new B();
    b->Create(B::IDD, this);
    b->CenterWindow(this);
    ShowWindow(SW_HIDE);B中OnClose
    CWnd* p = GetParent();
    DestroyWindow();
    p->ShowWindow(SW_SHOW);B中OnNcDestroy
    delete this;
      

  5.   

    好像不行吧?楼主的A框是应用主程序的对话框,如何“非模态”?
    其实问题很简单,
    在B中关闭A:
    CWnd* p = GetParent();
    p->ShowWindow(SW_HIDE);//仅将A框隐藏
    在A中关闭B:
    CWnd* pson = FindWindow(NULL,"B框名称");
    if(pson != NULL)
    {
      pson ->ShowWindow(SW_HIDE);//仅将A框隐藏
    }
      

  6.   

    如果模态对话框真的这么好隐藏,lz也不会提出这个问题了。
    在OnInitDialog中调用ShowWindow(SW_HIDE);对话框并不会隐藏。