1.調用CDocManager::DoPromptFileName,DoPromptFileName的作用是顯示文件打開對話框獲取文件名。
2.調用cwinapp::打開文檔文件(lpctstr lpszfilename)。
如果要改變文檔的打開方式,只需要在CWinApp的繼承類中重載DoPromptFileName和OpenDocumentFile即可。例如,更改默認的文件打開對話框。只需構建壹個文件來打開對話框,並在重載的DoPromptFileName中調用它來獲得壹個文件名。
我們來分析壹下CWinApp::OpenDocumentFile。OpenDocumentFile的工作流程是:
1.通過參數lpszFileName的後綴來確定使用哪個文檔模板。
2.對文檔模板的文檔、視圖和框架窗口進行調整。
3.調用CDocTemplate::OpenDocumentFile。
CDocTemplate::OpenDocumentFile是壹個純虛函數,由它的派生類CsingleDocTemplate和CMultiDocTemplate實現,用CsingleDocTemplate::open document file說明。
1.判斷是否有已存在的文檔,如果有,判斷是否已保存。
2.創建壹個新的框架窗口。
3.通過文件名路徑確定文件是否存在。如果存在,調用自定義CMyDoc::OnOpenDocument,否則調用CMyDoc::OnNewDocument。
從上面的分析,我們可以對MFC默認的文檔操作方式進行很多改變,比如改變文件打開和保存方式,改變文件打開和保存對話框。
上面顯示的各種源代碼都可以從VC安裝目錄下的MFC\include和mfc\src子目錄中獲得。CWinApp類、CDocTemplate類和CSingleDocManager、CDocument類的頭文件是afxwin.h,CWinApp類的源代碼在AppCore.cpp,CDocManager類的源代碼在Docmgr.cpp,CDocTemplate類和CsingleDocManager類的源代碼分別在doctempl.cpp和docsingl.cpp。
總之,學習MFC文檔視圖結構最好的方法就是多看MFC源代碼。