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