TN025: 文件、 檢視和框架建立
注意事項 |
---|
由於它第一次線上文件中包含尚未更新下列技術提示。如此一來,某些程序和主題可能已經過期或不正確。如需最新資訊,建議您先搜尋線上文件索引中有興趣的主題。 |
這個註解告訴您,WinApps、 DocTemplates、 文件、 框架和檢視表的建立和擁有權的問題。
WinApp
還有一個CWinApp在系統中的物件。
以靜態方式建構及架構的內部實作進行初始化WinMain。 您必須衍生自CWinApp來發揮任何作用 (例外狀況: 擴充 Dll 不應該有CWinApp執行個體 — 初始化是在DllMain而是)。
在一個CWinApp物件擁有一份文件範本 ( CPtrList)。 沒有每個應用程式的一或多個文件範本。 DocTemplates 通常會從資源檔 (也就是字串陣列) 載入在CWinApp::InitInstance。
pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);
AddDocTemplate(pTemplate);
在一個CWinApp具有應用程式中的所有框架視窗物件。 應用程式的主框架視窗應該存放在 CWinApp::m_pMainWnd。 您的設定通常是m_pMainWnd在InitInstance如果您不需要讓 AppWizard 替您完成實作。 這是一份文件介面 (SDI) 的CFrameWnd ,做為主要的應用程式框架視窗與唯一的文件框架視窗。 若為多重文件介面 (MDI) 則 MDI 框架 (類別CMDIFrameWnd),做為主要的應用程式框架視窗包含所有的子系CFrameWnds。 每一個子視窗是類別的CMDIChildWnd (衍生自CFrameWnd),並做為其中一個可能會有許多文件框架視窗。
DocTemplates
CDocTemplate是建立者及管理員的文件。 它擁有所建立的文件。 如果您的應用程式會使用資源為基礎的方法如下所述,它將需要衍生自CDocTemplate。
SDI 應用程式時,該類別的CSingleDocTemplate會持續追蹤的一個開啟的文件。 對於 MDI 應用程式時,該類別CMultiDocTemplate儲存清單 ( CPtrList) 是從該範本建立的所有目前開啟文件。 CDocTemplate::AddDocument與CDocTemplate::RemoveDocument提供虛擬成員函式中加入或移除文件範本。 CDocTemplate是一位朋友的 CDocument ,我們可以設定受保護 CDocument::m_pDocTemplate 後的指標移向 [建立文件的文件範本。
CWinApp處理預設的OnFileOpen實作,這會依序查詢所有文件範本。 實作包括尋找已開啟的文件,以及決定要開啟在新文件格式。
CDocTemplate管理文件和框架的 UI 繫結。
CDocTemplate就會記錄有未命名的文件的數目。
CDocument
A CDocument 擁有的CDocTemplate。
文件有一份目前開啟的檢視 (衍生自CView),也會檢視文件 ( CPtrList)。
文件建立/毀滅檢視,但是一旦建立了附加到彼此。 當文件關閉時 (也就是到檔案/關閉),將會關閉所有附加的檢視。 當關閉文件的最後一個檢視時 (亦即,視窗/關閉),將會關閉文件。
CDocument::AddView, RemoveView介面用來維護檢視清單。 CDocument 是一位朋友的CView ,我們可以設定 CView::m_pDocument 後的指標。
CFrameWnd
A CFrameWnd (也稱為框架) 相同在扮演的角色作為 MFC 1.0,但現在CFrameWnd類別設計為不衍生出新的類別,在許多情況下使用。 在衍生的類別CMDIFrameWnd和CMDIChildWnd讓許多標準命令已經實作亦得到提升。
CFrameWnd負責建立視窗框架的工作區中。 通常是一個填滿工作區的框架的主視窗。
對於 MDI 框架視窗中,用戶端區域填滿 MDICLIENT 控制項就是依序的所有 MDI 子框架視窗的父代。 SDI 框架視窗或 MDI 子框架視窗中,用戶端區域通常以填滿CView-衍生視窗物件。 情況下CSplitterWnd,檢視的工作區會以填滿CSplitterWnd window 物件,以及CView-衍生的視窗物件 (每個分割窗格的那一個) 建立做為子視窗的CSplitterWnd。