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

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

 2009-02-11 20:00:37 来源:WEB开发网   
核心提示: 文档类对象由文档模板类构造生成,单文档模板类CSingleDocTemplate只能生成一个文档类对象,深入浅出MFC“文档/视图”架构(2)――文档模板(7),并用成员变量 m_pOnlyDoc 指向该对象;多文档模板类可以生成多个文档类对象,用成员变量 m_docList 指向文档对象

文档类对象由文档模板类构造生成,单文档模板类CSingleDocTemplate只能生成一个文档类对象,并用成员变量 m_pOnlyDoc 指向该对象;多文档模板类可以生成多个文档类对象,用成员变量 m_docList 指向文档对象组成的链表。

CSingleDocTemplate的构造函数、AddDocument及RemoveDocument成员函数都在CDocTemplate类相应函数的基础上增加了对m_pOnlyDoc指针的处理:

CSingleDocTemplate::CSingleDocTemplate(UINT nIDResource,
    CRuntimeClass* pDocClass, CRuntimeClass* pFrameClass,
    CRuntimeClass* pViewClass)
       : CDocTemplate(nIDResource, pDocClass, pFrameClass, pViewClass)
{
    m_pOnlyDoc = NULL;
}
void CSingleDocTemplate::AddDocument(CDocument* pDoc)
{
    ASSERT(m_pOnlyDoc == NULL);   // one at a time please
    ASSERT_VALID(pDoc);
  
    CDocTemplate::AddDocument(pDoc);
    m_pOnlyDoc = pDoc;
}
void CSingleDocTemplate::RemoveDocument(CDocument* pDoc)
{
    ASSERT(m_pOnlyDoc == pDoc);   // must be this one
    ASSERT_VALID(pDoc);
  
    CDocTemplate::RemoveDocument(pDoc);
    m_pOnlyDoc = NULL;
}

同样,CMultiDocTemplate类的相关函数也需要对m_docList所指向的链表进行操作(实际上AddDocument和RemoveDocument成员函数是文档模板管理其所包含文档的函数):

// CMultiDocTemplate document management (a list of currently open documents)
void CMultiDocTemplate::AddDocument(CDocument* pDoc)
{
    ASSERT_VALID(pDoc);
  
    CDocTemplate::AddDocument(pDoc);
    ASSERT(m_docList.Find(pDoc, NULL) == NULL); // must not be in list
    m_docList.AddTail(pDoc);
}
void CMultiDocTemplate::RemoveDocument(CDocument* pDoc)
{
    ASSERT_VALID(pDoc);
  
    CDocTemplate::RemoveDocument(pDoc);
    m_docList.RemoveAt(m_docList.Find(pDoc));
}

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

Tags:深入浅出 MFC 文档

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