基于文件扩展名的多视图MFC SDI
我正试图构建一个具有以下要求的MFC SDI(单文档接口)应用程序:基于文件扩展名的多视图MFC SDI,mfc,file-extension,sdi,Mfc,File Extension,Sdi,我正试图构建一个具有以下要求的MFC SDI(单文档接口)应用程序: 一次只显示一个文档 支持基于从“文件打开”对话框中选择的文件类型的不同视图。例如,如果选择了*.txt文件,我将显示MyCViewText,而如果选择了*.jpg文件,我将显示MyCViewImage 显示文件扩展名的自定义列表“文件打开”对话框。例如,使用自定义对话框和过滤器,如:CFileDialog*dlg=newcfiledialog(TRUE、NULL、NULL、NULL、L“文本文件(*.txt)|*.txt |“
CFileDialog*dlg=newcfiledialog(TRUE、NULL、NULL、NULL、L“文本文件(*.txt)|*.txt |“L”JPEG文件(*.jpg)|*.jpg | |)代码>
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()
并切换文档模板视图运行时类(CMyCView),但我不确定这是否可行
MFC SDI是否不适合我的三个要求?我是否必须改用MFC MDI应用程序?如果我必须以某种方式使用MDI,那么我将如何限制在任何给定时间仅加载和显示单个文档
非常感谢您的帮助。在InitInstance函数中,创建一个新的SingleDoctTemplate并将其添加到模板集合中:
CSingleDocTemplate* pDocTemplate2;
pDocTemplate2 = new CSingleDocTemplate(IDR_MAINFRAME2,
RUNTIME_CLASS(CMyDoc2),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CMyView2));
if (!pDocTemplate2)
return FALSE;
AddDocTemplate(pDocTemplate2);
文件类型和扩展名位于字符串表条目中
IDR_MAINFRAME2 "MyCalc Windows Application\nSheet\nWorksheet\n Worksheets (*.myc)\n.myc\nMyCalcSheet\n MyCalc Worksheet"
MFC将识别模板,并将其作为文件新建或文件打开选项提供。根据您的要求,您可能需要为CMyDoc2和CMyView2创建新类,或者如果可以使原始类与任一文件类型一起使用,则可能需要使用原始类