改變MFC默認文檔操作方式
發表于:2007-07-14來源:作者:點擊數:
標簽:
當利用MFC編程時,其文檔/視圖結構為我們自動生成了文件新建,打開,保存的代碼。這為我們省去了很多麻煩。但當操作對象是ODBC 數據庫 等非文本文件時,問題出現了,如何改變其默認文檔操作過程了? 經過分析MFC源代碼可知。其默認菜單中的新建打開消息分別
當利用MFC編程時,其文檔/視圖結構為我們自動生成了文件新建,打開,保存的代碼。這為我們省去了很多麻煩。但當操作對象是ODBC
數據庫等非文本文件時,問題出現了,如何改變其默認文檔操作過程了?
經過分析MFC源代碼可知。其默認菜單中的"新建""打開"消息分別對應CwinApp::OnFileNew()與CwinApp::OnFileOpen(),而這兩個函數又直接調用CDocManager::OnFileNew與CDocManager::OnFileOpen。CDocManager::OnFileOpen的工作過程如下:
1. 調用CDocManager::DoPromptFileName,而DoPromptFileName的作用是顯示文件打開對話框獲得文件名。
2. 調用CWinApp::OpenDocumentFile(LPCTSTR lpszfileName)。
如果我們要改變文檔打開方式,只需在CWinApp的繼承類中重載DoPromptFileName與OpenDocumentFile即可。例如要改變默認的文件打開對話框。只需自建一個文件打開對話框,在重載的DoPromptFileName中調用他,獲得一個文件名。
下面分析CWinApp::OpenDocumentFile。OpenDocumentFile的工作過程是:
1. 由參數lpszFileName的后綴判斷用哪個文檔模板。
2. 對該文檔模板的的文檔,視圖,框架窗口作出調整。
3. 調用CDocTemplate::OpenDocumentFile
CDocTemplate::OpenDocumentFile是純虛函數,由其派生類CsingleDocTemplate及CMultiDocTemplate實現,以CSingleDocTemplate::OpenDocumentFile舉例說明之。
1. 判斷有無現存文檔,有則判斷其是否已保存。
2. 新建框架窗口。
3. 由文件名路徑判斷該文件是否存在,存在則調用自定義的CMyDoc::OnOpenDocument,否則調用CMyDoc::OnNewDocument。
從以上分析我們可以對MFC默認的文檔操作方式做多種改變,如改變文件打開保存方式,改變文件打開保存對話框等。
以上所示的各種源代碼都可以從VC安裝目錄下的MFC\include及mfc\src子目錄下得到。CWinApp類及CDocManager類CDocTemplate類及CsingleDocManager,CDocument類的頭文件是afxwin.h,CWinApp類的源代碼在AppCore.cpp中,CDocManager源代碼在Docmgr.cpp中,CDocTemplate類及CSingleDocManager類的源代碼分別位于doctempl.cpp與docsingl.cpp中。
總之,要學好MFC文檔視圖結構的最好方法就是多看看MFC源代碼。
原文轉自:http://www.kjueaiud.com