轉載請說明轉自:
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可獲得與此視相關的CDocumentCView::GetParentFrame()可獲得CMDIChildWnd;
通過以上分析可見CWinApp,CMDIChildWnd,CView,CDocument,CMultiDocTemplate之間知道其中一個實例必可知道其他所有幾個實例,CWinApp統領全局,任何時候只要獲得CWinApp實例,則所有的文檔模板文檔實例,視圖,Frame窗口均可被枚舉出來。AfxGetApp()獲得CWinApp實例指針。