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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章