要销毁非模态对话框的时候,我看书上都要有一个指针要来判断非模态对话框销毁没有,设为NULL。但是我下面这样做,第一次运行的时候,是正常的,当再运行的时候就出现问题了。
void CDlView::OnLButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
   if (m_pTest==NULL)
   {m_pTest=new CTest(this);
m_pTest->Create(IDD_DIALOG1,this);
m_pTest->ShowWindow(SW_SHOW); }
else
{ m_pTest->SetActiveWindow(); 
} CView::OnLButtonDown(nFlags, point);
}
这是按左键 的时候弹出对话框的程序。m_pTest是指向CTest非模态对话框类的。
下面是当按非对话框类中的cancel键的程序:
void CTest::OnCancel() 
{
// TODO: Add extra cleanup here
((CDlView*)GetParent())->m_pTest=NULL;

CDialog::OnCancel();
    DestroyWindow();
}
CDlView是view类。
请高手指点。我觉得是不是((CDlView*)GetParent())->m_pTest=NULL;这句有问题?

解决方案 »

  1.   

    有一个delete this需要自己写。
    //CDialog::OnCancel();不能调用,这是在销毁模态对话框void COptionsDialog::OnCancel ()
    {
        DestroyWindow ();
    }void CxxxxDialog::PostNcDestroy () 
    {
        CDialog::PostNcDestroy ();
        AfxGetMainWnd ()->SendMessage (WM_USER_DIALOG_DESTROYED, 0, 0);
        delete this;
    }
      

  2.   

    使用delete this 销毁自己
      

  3.   

    用delete this 销毁自己