我想清晰了解一下模式对话框和非模式对话框的详细销毁过程,最好有代码说明。谢谢各位。销毁对话框正确与否很重要,希望大家耐心解析下。

解决方案 »

  1.   

    先销毁窗口句柄
    再delete掉窗口指针
      

  2.   

    http://blog.csdn.net/zdl1016/archive/2009/04/03/4046352.aspx
      

  3.   

    深入浅出MFC  
    该书有说明
      

  4.   

    1、
    void CPatienInfo::OnDestroy()
    {
    CDialog::OnDestroy();
    }void CPatienInfo::OnNcDestroy()
    {
    CDialog::OnNcDestroy();
    }
    void CPatienInfo::PostNcDestroy()
    {
        CDialog::PostNcDestroy();
    CSK4000Dlg *plg = NULL;
    plg = (CSK4000Dlg*)GetParent();
    if(plg->plg_patient_info)
    {
    delete plg->plg_patient_info;
    plg->plg_patient_info = NULL;
    }
    }void CPatienInfo::OnClose()
    {
        CDialog::OnClose();
    CSK4000Dlg *plg = NULL;
    plg = (CSK4000Dlg*)GetParent();
    if(plg->plg_patient_info)
    {
    delete plg->plg_patient_info;
    plg->plg_patient_info = NULL;
    }
    }以上代码调试结果:
    当我关闭子窗口对话框的时候,调试时显示 ,程序只调用了OnClose();
    当我关闭父窗口的时候,什么都没调用
    2、
    void CPatienInfo::OnDestroy()
    {
    CDialog::OnDestroy();
    }void CPatienInfo::OnNcDestroy()
    {
    CDialog::OnNcDestroy();
    }
    void CPatienInfo::PostNcDestroy()
    {
        CDialog::PostNcDestroy();
    CSK4000Dlg *plg = NULL;
    plg = (CSK4000Dlg*)GetParent();
    if(plg->plg_patient_info)
    {
    delete plg->plg_patient_info;
    plg->plg_patient_info = NULL;
    }
    }void CPatienInfo::OnClose()
    {
        CDialog::OnClose();//未执行窗口的销毁
    }
    以上代码显示:
    当关闭子窗口时,运行到OnClose()
    当关闭父窗口时,其他3个函数被调用。
    那么 这两种情况是不是表明:我的销毁只需要OnClose()函数就行了?
      

  5.   

    1.OnClose()       消息响应函数,响应窗口的WM_CLOSE消息,当关闭按钮被单击的时候发送此消息2.OnDestroy()     消息响应函数,响应窗口的WM_DESTROY消息,当一个窗口将被销毁时,发送此消息3.OnNcDestroy()   消息响应函数,响应窗口的WM_NCDESTROY消息,当一个窗口被销毁后发送此消息4.PostNcDestroy() 重载函数,作为处理OnNcDestroy()函数的最后动作,被CWnd调用