CHelp HelpDlg;   ///////非模式对话框
BOOL b_ScrtipHelpDlg=FALSE;
void Dialog4::Onhelp() 
{  
if(b_ScrtipHelpDlg==FALSE)
{ HWND hWnd = ::GetForegroundWindow();
  HelpDlg.Create(IDD_DIALOG6,CWnd::FromHandle(hWnd));
  HelpDlg.ShowWindow(SW_SHOW); 
  b_HelpDlg=TRUE;
}
else 
{ HelpDlg.DestroyWindow();
  b_HelpDlg=FALSE;}

}上面就是我的代码,可是显示出来后,按创建的非模式窗口右上关闭窗口后,窗口仍旧没有销毁,所以用了HelpDlg.DestroyWindow();这句,可是在下一次创建的时候就会出错。用new了在delete也一样,该如何正确销毁?

解决方案 »

  1.   

    重载对话框的PostNcDestroy函数,加入一条删除对话框的语句delete this;然后如果你想销毁它,只要在主框架中调用对话框的DestroyWindow()函数就可以了。
      

  2.   

    CHelp *HelpDlg;   ///////非模式对话框初始化是HelpDlg=NULL;
    BOOL b_ScrtipHelpDlg=FALSE;
    void Dialog4::Onhelp() 
    {  
    if(b_ScrtipHelpDlg==FALSE)
    { HWND hWnd = ::GetForegroundWindow();
               HelpDlg=new CHelp;
      HelpDlg->Create(IDD_DIALOG6,CWnd::FromHandle(hWnd));
      //HelpDlg.ShowWindow(SW_SHOW);最好在属性里面设置好把show选上 
      b_HelpDlg=TRUE;
    }
    else 
    { HelpDlg->DestroyWindow();
               delete HelpDlg;
                 HelpDlg=NULL;
      b_HelpDlg=FALSE;}

    }
    我这样做是可以的