1、12.1.112.1.1 VCVC开发的应用程序类型开发的应用程序类型12.1.212.1.2 文档文档/视图结构程序的主要组成类视图结构程序的主要组成类 12.1.312.1.3 从程序员角度看从程序员角度看SDISDI与与MDIMDI应用程序应用程序 12.1.412.1.4 应用程序类应用程序类 12.1.512.1.5 文档文档/视图结构优点视图结构优点Visual C+Visual C+12.1.112.1.1VCVC开发的应用程序类型开发的应用程序类型v 利用MFC应用程序向导可以开发三种类型的应用程序:v 第一种是基于对话框的应用程序,上一章讲的对话框与控件大部分是基于对话框的应
2、用程序。v 第二种是基于SDI(Single Document Interface单文档接口)的应用程序,其特点是用户一次只能打开一个文档,若已经打开一个文档,想打开另一个文档时,必须关闭当前打开的文档。v 第三种基于MDI(Multi Document Interfac多文档接口)的应用程序,其特点是用户一次可以打开多个文档,若已经打开一个文档,又想打开另一个文档时,不必关闭当前打开的文档,它体现了Windows操作系统的多任务特点。Visual C+Visual C+12.1.212.1.2文档文档/视图结构程序视图结构程序 的主要组成类的主要组成类 v 1文档/视结构概述 在MFC 应用
3、程序中,文档视图结构用来将程序的数据本身(靠CDocument类来管理)与数据的显示以及用户对数据的交互(靠CView类来管理)相隔离,这种模式与数据库系统中的“表/视图”关系相似。v 2SDI应用程序的组成类 单文档应用程序是一种比较简单的基于文档/视图结构的程序,程序在运行过程中,只能打开该程序所关联的(如Word子处理程序关联的的是.Doc文件,即双击某个.Doc文件,启动它的是Word程序)一个文件。v 3MDI应用程序的组成类 多文档应用程序是一种比较复杂的基于文档/视图结构程序,程序在运行过程中,可以打开该程序所关联的(如Excel电子表格处理程序关联的的是.xls文件,即双击某个
4、.xls文件,启动它的是Excel程序)多个文件。Visual C+Visual C+【例12-1】本实例实现一个简单的文本编辑器功能。它是基于单文档的应用程序。(1)实例创建步骤 创建一个新的MFC AppWizard(exe)工程,工程名称为MyEditor。在AppWizard的第一步中,选择类型为Single Document(单文档类型)。AppWizard的第二步、第三步中使用缺省的选项,在第四步中,单击Advance(高级)按钮,弹出Advance Options对话框,在File Extension(文件扩展名)编辑框中输入txt2,如图图12.112.1所示。完后按Close
5、按钮。AppWizard的第五步使用缺省的选项,在第六步中,将CMyEditorView类的基类设置为CEditView后,按Close按钮关闭该对话框,在余下的几步中,全部使用默认值。最后单击“Finish”按钮,生成应用程序框架。(2)SDI应用程序的组成类 利用MFC AppWizard生成一个基于单文档的应用程序后,打开WorkSpace中的ClassView选项页,可以浏览到单文档应用程序的一些核心的组成类,如图图12.212.2所示,理解这些类及其之间的关系是理解该类应用程序的关键。Visual C+Visual C+图(一)图(一)图12.2 SDI程序的主要类图图12.1 文件
6、的高级选项对话框 Visual C+Visual C+【例12-1】(续)向导生成的一个典型的单文档应用程序包括一个应用程序类CMyEditorApp、一个主框架窗口类CMainFrame、一个文档类CMyEditorDoc、一个视图类CMyEditorView、一个“关于”对话框类CAboutDlg。打打开开上上述述五五个个类类的的定定义义文文件件,可可以以看看到到,基基于于文文档档/视视图图结结构构的的SDISDI应应用用程程序序至至少少由由以以下的几个类来组成:下的几个类来组成:应用程序类CMyEditorApp是一个从CWinApp类派生的类,它充当全部应用程序的容器。框架窗口类CMa
7、inFrame是一个从CFrameWnd类派生的类。在SDI应用程序中,框架窗口就是应用程序的主窗口,主窗口就是应用程序直接放置于桌面上的那个窗口,每个应用程序只能有一个主窗口,主窗口的标题栏上常常显示应用程序的名称(如在记事本程序中,新建一个文件后,主窗口的标题栏上显示“未定标题-记事本”)。文档类CMyEditorDoc是从CDocument类继承而来的类,它存储应用程序的数据,并将这些信息提供给应用程序的其余部分。视图类CMyEditorView是从CEditView类派生而来的,CEditView类提供了基本的文本编辑功能,是从CView类派生来的。视图窗口与其父窗口框架窗口的客户区域
8、对齐,它接收用户对应用程序的输入并显示相关联的文档数据。对话框类CAboutDlg是从CDialog派生来的,该对话框类显示一个简单的版本信息的“关于”对话框。对话框类的说明前面有一章已经专门讲解了。Visual C+Visual C+【例12-1】(续)(3)运行SDI应用程序 编译并运行上述程序的显示结果如图图12.312.3所示。在客户区中输入一些文本,然后保存。再新建一个,刚才所输入内容的文件已经关闭。这是一个典型的单文档应用程序,看它是否和记事本程序的功能类似。(4)保存文档 在MyEditor应用程序的客户区输入一些文本后,单击“文件|保存”,则弹出图图12.412.4所示的“文件
9、保存”对话框,将文件名编辑框中输入一个文件名如vc6,则在制定的目录下保存了一个vc6.txt2文件,其中保存类型编辑框中出现的的文字就是在图图12.112.1中的设置所起的作用。另外,在Window下,我们直接双击刚才建立的文件vc6.txt2,则该文件自动用程序MyEditor打开,和在Windows下用鼠标双击某个.doc文件,则该文件自动用Word字处理程序打开类似,该功能是怎样实现的呢?定位到应用程序类的InitInstance()函数中,可以看到下面的代码下面的代码:Visual C+Visual C+BOOL CMyEditorApp:InitInstance()BOOL CMy
10、EditorApp:InitInstance()CSingleDocTemplate*pDocTemplate;CSingleDocTemplate*pDocTemplate;pDocTemplate=new CSingleDocTemplate(pDocTemplate=new CSingleDocTemplate(IDR_MAINFRAME,IDR_MAINFRAME,RUNTIME_CLASS(CMyEditorDoc),RUNTIME_CLASS(CMyEditorDoc),RUNTIME_CLASS(CMainFrame),/main SDI frame windowRUNTIME_
11、CLASS(CMainFrame),/main SDI frame windowRUNTIME_CLASS(CMyEditorView);RUNTIME_CLASS(CMyEditorView);AddDocTemplate(pDocTemplate);/Enable DDE Execute open/Enable DDE Execute openEnableShellOpen();EnableShellOpen();/使得双击使得双击.txt2txt2文件类型时能调用该工程文件类型时能调用该工程MyEditorMyEditor打开打开RegisterShellFileTypes(TRUE);
12、RegisterShellFileTypes(TRUE);/在注册表中注册文件类型在注册表中注册文件类型.txt2txt2/Parse command line for standard shell commands,DDE,file open/Parse command line for standard shell commands,DDE,file openCCommandLineInfo cmdInfo;CCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);上述两行加黑的代码的功能就是实现某种类型的文件与某个应用程序关联的语句,有了它就能
13、在双击某种类型的文件时,调用相应的应用程序把其打开。Visual C+Visual C+图(二)图(二)图12.4 文件保存对话框图12.3 MyEditor的运行界面 Visual C+Visual C+【例12-2】本实例实现一个丰富文本编辑功能,即可以在当前文档中插入其它的图形、音频等。它是基于多文档的应用程序。(1)实例创建步骤 创建一个新的MFC AppWizard(exe)工程,工程名称为MyWord。在AppWizard的第一步中,选择类型为Multiple Documents(多文档类型)。AppWizard的第二步使用缺省的选项,在第三步中主要选择如何支持复合档支持 文档的,我们选择“Container”容器支持,如图图12.512.5所示,完后按Next按钮。AppWizard的第二步、第三步中使用缺省的选项,在第四步中,单击Advance(高级)按钮,弹出Advance Options对话框,在File Extension(文件扩展名)编辑框中输入doc2,如图图12.612.6所示。AppWizard的第五步使用缺省的选项,在第六步中,将CMyWordView类的基类设置为CRichEditView后,按Close按钮关闭该对话框,在余下的几步中,全部使用默认值。(2)MDI应用程序组成类 利用MFC AppWizard生成一个基于多文档的应用程序后,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1