我有一个主对话框Mdlg,在Button1单击事件中创建一个非模态的对话框dlg1,我想通过再次点击Button1时销毁dlg1,在网上找了很多方法都不行,代码如下:
// MdlgDlg.cpp : 实现文件
void CMdlgDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
dlg1 *d1 = new dlg1;
d1->Create(IDD_DIALOG1,NULL);
if(flg==1)
{
d1->ShowWindow(SW_SHOW);
flg=0;
}
else
{
d1->OnCancel();
flg=1;
}
}
我在dlg1.cpp中重载函数OnCancel()和PostNcDestroy(),代码如下:
void dlg1::OnCancel(){
    this->DestroyWindow();
}void dlg1::PostNcDestroy(){
    CDialog::PostNcDestroy();
    delete this;
}
结果点击Button1时可以显示,但再次点击却不能销毁,我设断点查看有执行this->DestroyWindow();但为何销毁不了,请大侠指教

解决方案 »

  1.   

    每次都:
    dlg1 *d1 = new dlg1;
    d1->Create(IDD_DIALOG1,NULL);
    改:
     h 中:
    dlg1 *m_pd1;
    构造函数中:
    m_pd1=0;
    //
    OnBnClickedButton1()if(m_pd1 == 0)
    {
        m_pd1 = new dlg1;
        d1->Create(IDD_DIALOG1,NULL);
    }
      

  2.   

    //H
    Class CMdlgDlg
    {
        dlg1 *d1;
    }//CPP
    CMdlgDlg::CMdlgDlg()
    {
        d1 = NULL;
    }void CMdlgDlg::OnBnClickedButton1()
    {
        if( d1 )
        {
            d1->DestroyWindow();
            delete d1;
            d1 = NULL;
        }
        else
        {
            d1 = new dlg1;
            d1->Create(...);
        }
    }
      

  3.   

    你这个逻辑出问题了吧
    怎么能在自己的体内删除自己呢?
    你这个对话框应该是在父窗口的类里建一个指针
    然后动态创建对话框
    当父窗口销毁时,对这个对话框的指针执行delete
    这样逻辑才通的吗