创建非模态对话框:
BOOL CurveControl::Create()
{
return CDialog::Create(CurveControl::IDD);
}然后用DestroyWindow()销毁对话框。第二此再打开对话框,调用Create()时,就会出错但是只有在Debug模式下才会出错,Release模式下则不会。求高手指点呀!!

解决方案 »

  1.   

    你怎么调用的DestroyWindow?调用是Win32 API的还是CWnd::DestroyWindow()呢?
      

  2.   

    非模态对话框,你可以隐藏起来,最后程序关闭的时候销毁CWnd::DestroyWindow();
    或者你Create对话框的时候判断一下是否已经关联了窗口,即CWnd类的m_hWnd这个HWND不为NULL,为NULL的话就Create()否则不Create操作
      

  3.   


    CurveControl *p;p = new CurveControl (this);
    创建:p->Creat();
    销毁:p->DestroyWindow();
      

  4.   


    因为每次打开时要更新数据,所以不能隐藏。每次都判断的。Debug是出现在第二次调用Creat的时候。但是Release不会报错
      

  5.   

    说不上没有delete ?
    View delete了,CDialog没啊
      

  6.   

    你确定你下次Create的时候,已经调用过DestroyWindow了?
      

  7.   

    CView::DestoryWidnow销毁的时候,内部调用了个delete this;
    而非模态对话框没有调用,需要我们自己delete 这个指针我也不是很清楚说不上这个问题
    你可以试下,
    p->DestroyWindow();
    delete p;
    p=NULL;
    p = new **();
    p->Create...
      

  8.   

    DestroyWindow你是不是重载了,又没有调用父类的DestroyWindow?
      

  9.   

    模态对话框每次调用完都要把它销毁:
    CWnd::DestroyWindow();
    否则再次调用肯定要出错的。虽然你把窗口关了,但它仍占据每寸还在运行,在任务管理器中可以看到。所以调用完要销毁它,释放内存。
      

  10.   

    看下你的debug和release工程配置是不是不一样
      

  11.   

    Debug模式和Release模式本身有很大的区别,所以你的情况很正常。建议用 EndDialog()
      

  12.   

    我觉得最简单的方法是声明一个指针,用之前delete m_dlg1要在初始化为NULLvoid CTstDisableDlg::OnButton4() 
    {
    // TODO: Add your control notification handler code here if (m_dlg1)
    {
    delete m_dlg1;
    } m_pdlg1 = new Dlg1;
    m_pdlg1->Create(IDD_DIALOG1);

    }
      

  13.   

    DistroyWindow后,delete掉再重新new一个出来创建吧
      

  14.   

    CurveControl *p;
    这个指针delete了没有呢