其實所有的節日,都不是為了禮物和紅包而生,而是提醒我們不要忘記愛與被愛,生活需要儀式感,而你需要的是在乎和關愛。。。
---- 網易雲熱評
一、特點
只能管理一個文件
二、相關類
CWinApp / CFrameWnd / CView / CDocument - 文件類
CDocManager - 文件管理類
CDocTemplate - 文件模板類
CSingleDocTemplate - 單文件模板類
三、例項
1、新增三大框架,動態建立
class CMyDoc :public CDocument { DECLARE_DYNCREATE(CMyDoc)};IMPLEMENT_DYNCREATE(CMyDoc,CDocument)class CMyView :public CEditView { DECLARE_DYNCREATE(CMyView)};IMPLEMENT_DYNCREATE(CMyView, CEditView)class CMyFrameWnd :public CFrameWnd{ DECLARE_DYNCREATE(CMyFrameWnd)};IMPLEMENT_DYNCREATE(CMyFrameWnd,CFrameWnd)
2、新增應用框架,手動建立
class CMyWinApp:public CWinApp {public: virtual BOOL InitInstance();};CMyWinApp theApp;BOOL CMyWinApp::InitInstance() { //單文件模板類物件 CSingleDocTemplate* pTemplate = new CSingleDocTemplate(IDR_MENU1, RUNTIME_CLASS(CMyDoc), RUNTIME_CLASS(CMyFrameWnd), RUNTIME_CLASS(CMyView)); AddDocTemplate(pTemplate); OnFileNew(); m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE;}
3、執行報錯,需要新增字串表
4、新增字串表,右擊資源,新增string table
5、執行結果:
6、關係圖
theApp
|->m_pDocManager //文件管理類物件地址
|->m_templateList
|->CSingleDocTemplate* pTemplate
|->m_pOnlyDoc //文件類物件地址
|->m_pDocClass
//文件類的靜態變數的地址RUNTIME_CLASS(CMyDoc)
|->m_pFrameClass
//框架類的靜態變數的地址RUNTIME_CLASS(CMyFrameWnd)
|->m_pViewClass
//檢視類的靜態變數的地址RUNTIME_CLASS(CMyView)
7、OnFileNew函式的執行過程
透過theApp獲取文件管理類物件地址(m_pDocManager)
透過文件管理類物件地址(m_pDocManager)獲取一個連結串列成員(m_templateList)並從連結串列中獲取單文件模板類物件(pTemplate)
利用單文件模板類物件(pTemplate)獲取文件類的靜態變數地址,並呼叫物件加工廠函式,動態建立文件類物件,並返回物件地址。
利用單文件模板類物件(pTemplate)獲取框架類的靜態變數地址,並呼叫物件加工廠函式,動態建立子框架類物件,並返回物件地址。
利用框架類物件呼叫LoadFrame函式,建立主框架視窗.在處理框架視窗的WM_CREATE訊息時,動態建立檢視類物件並建立檢視視窗。
在處理檢視視窗的WM_CREATE訊息時,將檢視類物件和文件類物件建立繫結關係