比如我在CMyDialog1按钮上使用非模态方式显示另一个对话框CMyDialog2(如果有了就使它变为活动窗口)
if(!FindWindow(NULL,m_sText))
{
CMyDialog1* dlg1=new CMyDialog1;
dlg1->Create(IDD_DIALOG1,this);
dlg1->ShowWindow(SW_SHOW);
}
else
{
CWnd* oldWnd=FindWindow(NULL,m_sText);
oldWnd->SetForegroundWindow();当关闭CMyDialog2时怎么销毁呢?我是在CMyDialog2中的 CMyDialog2::PostNcDestroy()
中增加了 delete this; OnOK()和OnCancel()是这样写的,不知道对不对:void CMyDialog2::PostNcDestroy()
{
delete this;
CDialog::PostNcDestroy();
}void CMyDialog2::OnOK()
{
CMyDialog2::DestroyWindow();
// CDialog::OnOK();
}void CMyDialog2::OnCancel()
{
CMyDialog2::DestroyWindow();
// CDialog::OnCancel();
}现在是显示对话框没问题,但是关闭后就不能再显示出来了!请问,问题出在哪?
单步调试发现关了对话框后仍然能找到,所以就不会显示出来,所以应该是销毁
对话框的地方有问题,但如何销毁这个CMyDialog2呢??

解决方案 »

  1.   

    OnOK()和OnCancel()不用重写。关闭了之后要显示的话,又得Create一次
    如果仅仅是不想让对话框可见,需要的时候再显示出来,应该用ShowWindow
      

  2.   

    不知道为什么,我把这两个函数内都增加上 delete this; 就可以了!!谁说下这事怎么回事?
    void CMyDialog2::OnOK()
    void CMyDialog2::OnCancel()
      

  3.   

    我在下面几个地方都设定了断点,发现程序只运行了OnCancel(),其他的都不执行了
    我把OnCancel()里面内容屏蔽后,关闭程序也不会执行其他几个地方。但当我关闭整个程序时,会执行PostNcDestroy里面的内容。void CMyDialog2::PostNcDestroy()
    void CMyDialog2::DestroyWindow()
    void CMyDialog2::OnOK()
    void CMyDialog2::OnCancel()
      

  4.   

    糊涂了你要什么效果?
    是觉得窗口没有关掉么?调用DestroyWindow就好了啊另,你给的代码和CMyDialog2有关系么?
      

  5.   

    这样建立出来的窗体为什么始终在父窗体的上边呢??打开这个子窗体,鼠标点了父窗体后,父窗体仍然不能跳到他前边来??CMyDialog1* dlg1=new CMyDialog1;
    dlg1->Create(IDD_DIALOG1,this);
    dlg1->ShowWindow(SW_SHOW);