欢迎来到天天文库
浏览记录
ID:40239554
大小:1.65 MB
页数:42页
时间:2019-07-28
《Visual C++应用开发与实践 刘乃琦_ VC 第2章 文档与视图》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、本章要求:第2章文档视图程序设计文档视图结构的创建文档模板文档对象视图对象框架窗口文档视图的典型应用2.1构建文档视图应用程序在MFC中,为了管理和维护文档、视图、框架之间的关系,定义了一个文档模板类CDocTemplate,并从该类派生了两个子类CSingleDocTemplate和CMultiDocTemplate。实际上,文档、视图、框架的创建都是通过CDocTemplate或其派生类实现的。当应用程序的文档模板为CSingleDocTemplate时,表示应用程序为单文档应用程序;如果应用程序的文档模板为CMu
2、ltiDocTemplate,表示应用程序是多文档应用程序。单文档应用程序与多文档应用程序的区别是:单文档应用程序一次只能打开一个框架窗口,同一时刻,只能存在一个文档实例;多文档应用程序一次可以打开多个框架窗口,每个框架窗口都可以包含一个文档实例。2.2.1文档模板的创建2.2.2文档的创建2.2.3框架与视图的创建2.2文档视图结构的创建在文档、视图结构的代码框架中,向导生成了文档类和视图类,文档类(CDocument)负责读取用户的数据,将视图窗体中的数据和磁盘上的文件进行同步;视图类(CView)负责将用户的数据显示在
3、视图窗体中以及用户数据的打印。文档类和视图类是两个相互独立的类,但两个类都与用户的数据有关,为了使文档类使用的数据和视图类显示的数据保持一致,在MFC中通过文档模板类(CDocTemplate)将文档类和视图类联系在一起,下面就是向导生成的代码框架中的一部分代码,主要完成文档模板对象的创建,具体代码如下:BOOLCHelloWorldApp::InitInstance(){CMultiDocTemplate*pDocTemplate;pDocTemplate=newCMultiDocTemplate(IDR_HELLOWTYP
4、E,RUNTIME_CLASS(CHelloWorldDoc),RUNTIME_CLASS(CChildFrame),RUNTIME_CLASS(CHelloWorldView));AddDocTemplate(pDocTemplate);}2.2.1文档模板的创建文档模板类有CSingleDocTemplate和CMultiDocTemplate两个子类,分别应用于单文档视图结构和多文档视图结构,无论是单文档模板类CSingleDocTemplate还是多文档模板类CMultiDocTemplate,只要通过构造函数创建了模
5、板对象,就可以通过CWinApp类的方法AddDocTemplate将对文档视图结构的引用加入到应用程序中,也就是说现在可以使用文档视图结构的特性了。文档对象(CDocument对象)的创建主要是在文档模板对象创建的同时创建的,这项工作主要由CRuntimeClass类来完成,由于任何继承自CObject类的对象在运行的时候都分配一个CRuntimeClass结构,只要有CRuntimeClass结构就代表相应的对象已经创建,CRuntimeClass类为CDocument类创建了CRuntimeClass结构,所以CDocu
6、ment对象在创建文档模板对象的同时创建。文档对象创建后并没有和任何用户数据相连,此时需要通过CDocument类的OnOpenDocument方法来打开用户数据所在的磁盘文件或是通过方法OnNewDocument新建数据文件。如果没有使用文档视图结构,打开磁盘文件需要使用CFile类,对文件的读写都需要使用CFile类的方法。使用了文档视图结构后通过CFile类的操作文件的任务都交给CDocument类来完成。1.2.2文档的创建文档对象的创建主要通过菜单“文件/新建”或菜单“文件/打开”实现实现的过程如下:(1)菜单“Fi
7、le/Open”的实现函数是在继承自CWinApp类的应用程序类的实现文件中进行映射的,具体代码如下:ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen)(2)在OnFileOpen方法中调用了CDocManager(文档管理器)类的OnFileOpen方法。(3)在CDocManager类的OnFileOpen方法中通过DoPromptFileName方法弹出打开对话框,并调用AfxGetApp的OpenDocmentFile方法。(3)在AfxGetApp的OpenDocmentFile
8、方法中又调用CDocManager类的OpenDocumentFile方法。(4)在CDocManager类的OpenDocumentFile方法中调用CDocTemplate对象的OpenDocumentFile方法。(5)模板对象(CDocTemplate)有单文档模板对
此文档下载收益归作者所有