多个视图我试图建立一个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,那么我将如何限制只在任何给定时间加载并显示单个文档?
任何帮助表示赞赏。