动态创建视图时候 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窗口的子窗口。

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