【发布时间】:2013-01-17 17:44:38
【问题描述】:
我正在尝试构建具有以下要求的 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,那么我将如何限制在任何给定时间仅加载和显示一个文档?
感谢任何帮助。
【问题讨论】:
标签: mfc file-extension sdi