動態創建視圖時候 AfxCheckDialogTemplate執行出錯

 

      動態創建視圖時候 AfxCheckDialogTemplate執行出錯

在mfc的sdi架構中,準備多做幾個視圖,試圖類繼承自formview,但在動態創建視圖的時候出了錯誤,AfxCheckDialogTemplate執行出錯。後來通過搜索發現cformview類關聯對話框時候,資源必須具備child屬性。

1.CFormView類關聯的對話框資源必須具有Child屬性。

由CFormView派生的類,可以關聯一個對話框資源。但該對話框資源必須在屬性設定中Style選定[Child]屬性,否則的話,
代碼可以編譯,但Debug運行會報告一個斷言錯誤,跟蹤代碼,斷言在:

#ifdef _DEBUG

    // dialog template must exist and be invisible with WS_CHILD set
    if (!_AfxCheckDialogTemplate(m_lpszTemplateName, TRUE))
    {
        ASSERT(FALSE);          // invalid dialog template name
        PostNcDestroy();        // cleanup if Create fails too soon
        return FALSE;
    }

#endif //_DEBUG

2.CFormView比較特殊,是一個父窗體嵌套了一個子窗體,所以,
CFormView類的派生類的實例不響應WM_CLOSE消息,僅僅響應WM_DESTROY消息。
另外,若要用代碼關閉當前View,也不能直接:PostMessage(WM_CLOSE,0,0);
而必須先獲取父窗體的指針,然後對父窗體發送WM_CLOSE消息纔行,像這樣:
GetParent()->PostMessage(WM_CLOSE,0,0);
才能夠達到目的。
《深入淺出MFC》第八章461頁圖8-1清楚地說明了這種情況,View窗口是CChildFrame窗口的子窗口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章