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實例指針。

相關文章
相關標籤/搜索