我正在尝试构建具有以下要求的 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 对话框插入文件扩展名过滤器。如果我CWinApp::OnFileOpen()
使用 custom覆盖CFileDialog
,那么我将丢失 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,那么我将如何限制在任何给定时间仅加载和显示一个文档?
任何帮助表示赞赏。