多個視圖我試圖建立一個MFC SDI(單文檔界面)應用程序符合這些要求:MFC SDI與基於文件擴展名
顯示在同一時間只有一個文檔。
支持基於從文件打開對話框中選擇的文件類型的不同視圖。例如,如果選擇了* .txt文件,我將顯示MyCViewText,而如果選擇了* .jpg文件,則顯示MyCViewImage。
顯示文件擴展名文件打開對話框的自定義列表。例如,使用自定義對話框和過濾器,如:
CFileDialog *dlg = new CFileDialog(TRUE, NULL, NULL, NULL, L"Text Files (*.txt)|*.txt|" L"JPEG Files (*.jpg)|*.jpg||");
但是,我有兩個問題。
首先,我不知道在哪裏插入File - > Open對話框的文件擴展名過濾器。如果我用自定義CFileDialog
覆蓋CWinApp::OnFileOpen()
,那麼我將失去SDI提供的所有幕後行爲,例如調用CDocument::OnDocumentOpen()
調用並初始化文檔模板的CView。我無法在覆蓋中調用CWinApp::OnFileOpen()
,因爲第一個文件打開對話框出現在第一個文件擴展名篩選器之後,並且沒有文件擴展名篩選器。
其次,從文件打開對話框中選擇文件後,我不知道在哪裏插入視圖切換代碼。文檔模板設置是這樣的:
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMyAppDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CMyCView));
好像我將要重寫CWinApp::OnFileOpen()
和切換文檔模板視圖RUNTIME_CLASS(CMyCView),但我不知道這甚至有可能。
MFC SDI是否不符合我的三個要求?我必須使用MFC MDI應用程序嗎?如果我必須以某種方式使用MDI,那麼我將如何限制只在任何給定時間加載並顯示單個文檔?
任何幫助表示讚賞。