WEB开发网
开发学院软件开发VC 深入浅出MFC“文档/视图”架构(2)――文档模板 阅读

深入浅出MFC“文档/视图”架构(2)――文档模板

 2009-02-11 20:00:37 来源:WEB开发网   
核心提示: 文档模板类CDocTemplate还保存了它所支持的全部文档类的信息,包括所支持文档的文件扩展名、文档在框架窗口中的名字、图标等,深入浅出MFC“文档/视图”架构(2)――文档模板(6),CDocTemplate类的AddDocument、RemoveDocument成员函数使得CDocu

文档模板类CDocTemplate还保存了它所支持的全部文档类的信息,包括所支持文档的文件扩展名、文档在框架窗口中的名字、图标等。

CDocTemplate类的AddDocument、RemoveDocument成员函数使得CDocument* pDoc参数所指向的文档归属于本文档模板(通过将this指针赋值给pDoc所指向CDocument对象的m_pDocTemplate成员变量)或脱离与本文档模板的关系:

void CDocTemplate::AddDocument(CDocument* pDoc)
{
    ASSERT_VALID(pDoc);
    ASSERT(pDoc->m_pDocTemplate == NULL);  // no template attached yet
    pDoc->m_pDocTemplate = this;
}
void CDocTemplate::RemoveDocument(CDocument* pDoc)
{
    ASSERT_VALID(pDoc);
    ASSERT(pDoc->m_pDocTemplate == this);  // must be attached to us
    pDoc->m_pDocTemplate = NULL;
}

而CDocTemplate类的CreateNewDocument成员函数则首先调用CDocument运行时类的CreateObject函数创建一个CDocument对象,再调用AddDocument成员函数将其归属于本文档模板类:

CDocument* CDocTemplate::CreateNewDocument()
{
    // default implementation constructs one from CRuntimeClass
    if (m_pDocClass == NULL)
    {
       TRACE0("Error: you must override CDocTemplate::CreateNewDocument.n");
       ASSERT(FALSE);
       return NULL;
    }
    CDocument* pDocument = (CDocument*)m_pDocClass->CreateObject();
    if (pDocument == NULL)
    {
       TRACE1("Warning: Dynamic create of document type %hs failed.n",
           m_pDocClass->m_lpszClassName);
       return NULL;
    }
    ASSERT_KINDOF(CDocument, pDocument);
    AddDocument(pDocument);
    return pDocument;
}

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:深入浅出 MFC 文档

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接