CWinApp类CMultiDocTemplate类CDocument类CView类的关系

转自:http://blog.csdn.net/bboot/article/details/26884011框架

不得不转,瞬间搞清了不少问题,短小精悍函数

1.CWinApp类          .net

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

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

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

2.CDocTempplate类文档

通常经常使用其派生类CSingleDocTemplate类和CMultiDocTemplate类it

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

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

(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类型的文档模板的实例;  

四、CView类  

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

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

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

相关文章
相关标签/搜索