zoukankan      html  css  js  c++  java
  • CWinApp类CMultiDocTemplate类CDocument类CView类的关系

    转载请说明转自:

    1.CWinApp类          

    它包含并管理着应用程序的文档/视窗的所有信息。它有一个成员变量CDocManager*m_pDocManager,此变量是文档/视窗的管理器;m_templateList 是CDocManager里的一个列表,此列表里保存了所有文档模板的指针,当用户调用CWinApp::AddDocTemplate(pDocTemplate)后该pDocTemplate存入了CWinApp::m_pDocManager::m_templateList这个链表里。 

     下面的两个函数是对 m_templateList的查找和遍历操作:

      CWinApp::GetFirstDocTemplatePosition()//获得第一个文档模板的 POSITION类型的位置 
      CWinApp::GetNextDocTemplate(POSITION&pos) //获得pos位置的文档模板,并将下一个模板的POSITOON位置传给pos;  

    2.CDocTempplate类

    一般常用其派生类CSingleDocTemplate类和CMultiDocTemplate类

    (1).CSingleDocTemplate类 (继承与CDocTempplate类)

      一次只能打开一个文档且对应一个视图或者多个,可以打开多种类型的文档(打开一种关闭另一种文档)

    (2).CMultiDocTemplate类 (继承与CDocTempplate类) 

    这是一个极重要的类。CMultiDocTemplate::m_docList保存着所有该种文档的文档实例的指针列表。下面两个函数用于维护CMultiDocTemplate::m_docList数据  
    CMultiDocTemplate::AddDocument(CDocument*  pDoc);  
    CMultiDocTemplate::RemoveDocument(CDocument*  pDoc);  
    而下面的两个函数用于遍例该文档类型所有文档实例。  
    CMultiDocTemplate::GetFirstDocPosition()const;  
    CMultiDocTemplate::CDocument*GetNextDoc(POSITION&rPos)const;  
    3.CDocument类 
    CDocument每一个文档实例可有多个视与之相对应。  
    CDocument::m_viewList用来保存所有与此文档实例相关的View  
    CDocument::GetDocTemplate可获得相应的文档模板例如CMultiDocTemplate类型的文档模板的实例;  

    4、CView类  

    例如在多文档视图的框架下每一个CMDIChildWnd有一个View  

    CView::GetDocument可获得与此视相关的CDocument  
    CView::GetParentFrame()可获得CMDIChildWnd;   

    通过以上分析可见CWinApp,CMDIChildWnd,CView,CDocument,CMultiDocTemplate之间知道其中一个实例必可知道其他所有几个实例,CWinApp统领全局,任何时候只要获得CWinApp实例,则所有的文档模板文档实例,视图,Frame窗口均可被枚举出来。AfxGetApp()获得CWinApp实例指针。

  • 相关阅读:
    WordPress Editorial Calendar插件权限安全绕过漏洞
    Linux kernel 本地拒绝服务漏洞
    Linux kernel ‘evm_update_evmxattr’函数拒绝服务漏洞
    VB6-ListView的排序和点滴
    VB6IDE改造
    杂记-匆匆北京行
    第60篇随笔:《道法自然》读书笔记
    VB6 AddIns 控件样式模板
    VB6-改造ComUnit(免除用例名称注册)
    VB6-设计模式点滴
  • 原文地址:https://www.cnblogs.com/BBOOT/p/3771434.html
Copyright © 2011-2022 走看看