解決 Warning: calling DestroyWindow in CWnd::~CWnd OnDestroy or PostNcDestroy in derived class will not be called

jianzhanger發表於2011-04-27

    出現上面Warning,原因是,呼叫視窗類析構的時候,視窗物件還沒有銷燬.
具體表現在,當在一個視窗中生成另外一個視窗CTestDlg 時:
        CTestDlg *pTd = new CTestDlg();
        pTd->Create(IDD_DIALOG_TEST,this);
        pTd->ShowWindow(TREU):

        //結束時

        delete pTd;
        pTd = NULL;
        這樣的寫法就會出現上面的warning,正確的做法如下:

        //結束時

        if(pTd)
        {
            pTd->DestoryWindow();
            pTd = NULL;
        }

        //在後生成的視窗類中加如下程式碼

        void CTestDlg ::PostNcDestroy()
        {
            // TODO: 在此新增專用程式碼和/或呼叫基類
            delete this;//這個一定要
            CDialog::PostNcDestroy();
        }

相關文章