Visual C++ 6.0 程序设计案例教程第七章_第1页
Visual C++ 6.0 程序设计案例教程第七章_第2页
Visual C++ 6.0 程序设计案例教程第七章_第3页
Visual C++ 6.0 程序设计案例教程第七章_第4页
Visual C++ 6.0 程序设计案例教程第七章_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

主编沈大林杨旭电子工业出版社《VisualC++6.0程序设计案例教程》 电子教案中等职业学校教学用书(计算机技术专业)

7.1案例34文件访问7.1.1学习目标本案例将实现一个可以存储的SDI程序,程序效果如图7-1所示

在本例的实现过程中,我们将学习文档/视结构和数据的串行化操作等知识

图7-1文件访问7.1.2程序实现1.创建程序框架创建一个基于SDI的应用程序框架,项目名称为“MyPro34”。2.资源编辑转到资源编辑窗口,打开串表编辑器,对ID为IDR_MAINFRAME的字符串进行修改,该字符串决定了SDI应用程序所创建的文档类型。将字符串内容修改为“记事本\n\记事本\nMyDoc(*.mdc)\n.mdc\n记事本.Document\nDocument”,如图7-2所示。

3.代码编辑

图7-2修改文档类型字符串7.1.3知识要点1.文档与视图结构文档与视图是MFC程序设计的重要组成部分,要学好VisualC++,就必须对文档视图结构有深入的了解。文档是数据的载体,管理、维护数据,支持并实现数据的串行化操作。视图是数据的表现,视图实现了数据的显示,并对数据的编辑提供了支持。视图从文档取得数据,并将修改后的数据传送回文档以保存;文档从永久存储介质取得数据,将其传送给视图,并将视图传回的数据写入到存储介质中。文档与视图的相互作用,使程序中对数据的编辑与存储得以实现。虽然文档与视图之间有着复杂的相互作用过程,但我们并不需要去完全了解。文档与视图将数据与显示分离的结构,使得文档程序设计变得简单易行。虽然MFC中并不强制使用文档/视图结构,大多数的MFC特性也都可以在非文档/视图中得到支持,但文档/视图结构使得程序设计更为方便有效。

永久存储介质(如磁盘文件等)通过文档类成员函数(如Serialize)读写文件文档对象通过文档对象指针读取文档数据通过GetDocument函数获取文档对象指针并传递数据到文档视图对象用户通过消息处理与用户交互图7-3文档/视图结构

2.文档类(CDocument)文档类CDocument本身没有直接提供强大的功能实现,它只是提供了一个框架,为文档对象与相关的其他对象(视图、应用程序对象及框架窗口等)进行交互提供了框架。对文档部分的设计工作,基本上都是在这个已有框架的基础上,添加所需要的功能代码。设计程序所需的特定文档类方法如下:(1)为程序中的文档从CDocument类或其派生类中派生出一个相应文档类。(2)为新文档类添加所需的成员变量,这些变量用于保存文档的数据,其他对象将通过对这些成员变量的访问来实现对数据的读取和存储。(3)对CDocument类函数进行必要的重载,至少要重载负责文档数据读写的成员函数Serialize(),通过该函数实现文档数据的串行化。其他常用的、需要重载的成员函数还有:OnNewDocument()、OnOpenDocument()和DelectContents()等。在文档/视图结构中,文档的主要任务通常是对数据进行管理和维护,数据将保存在文档类的成员变量中,视图通过对这些变量的访问来获取或送回数据,并能过这种方式来更新并显示数据。

3.数据的串行化串行化是指将对象写入永久存储介质或者将对象从永久存储介质中读出的过程。图7-4给出了文档串行化的过程。

单击【保存】菜单项打开当前文档对应文件单击【另存为】菜单项打开【另存为】对话框,输入文件名创建并打开文件打开当前文档对应文件创建CFile对象创建CArchive对象并与文件相关联将Archive对象传递给调用的Serialize函数Serialize函数通过Archive对象将当前文档数据保存到打开的文件中单击【打开】菜单项打开文件并创建CFile对象通过【打开】文件对话框指定要打开的文件创建CArchive对象与文件关联将CArchive对象传递给文档类的Serialize函数通过Serialize函数从文件中读取文档数据图7-4打开文档及保存文档时的串行化过程

4.CArchive类与CFile类CArchive类没有基类CArchive对象类似于C++中的标准输入/输出流,它提供了一组用于从文件读取数据和将数据写入文件的成员函数。可以使用“>>”和“<<”运算符像C++中一样进行数据的输入/输出。与C++的标准输入/输出流不同的是,标准输入/输出流存取的是格式化的ASCII字符串,而CArchive存取的是二进制对象,这种格式更为有效,且用途广泛。在使用“>>”和“<<”运算符时,CArchive对象将作为运算符的第一操作数据,表7-1给出了所支持的第二操作数数据类型。5.文档与视图的交互每一种类型的文档都有与之对应的文档模板进行管理,文档模板负责创建和管理当前类型的所有文档,文档、与文档关联的视图和与视图关联的框架架窗口都由文档模板所创建。程序框架提供了两个文档模板类:CSingleDocTemplate和CMultiDocTemplate,分别用于支持SDI应用程序和MDI应用程序。SDI应用程序一次只能使用一种类型的文件,如Windows中的画图、记事本等。MDI应用程序则可以同时使用多种类型的文件,如WORD、EXCEL等。

文档、视图、框架三者相互关联,彼此都包含了指向对方的指针,关于三者创建的详细过程参考图7-5、7-6和7-7的图示说明。

图7-5文档的创建

图7-6框架窗口的创建

在文档/视图结构程序中,各结构对象间的访问见表7-5所示。图7-7视图的创建

7.2案例35我的记事本7.2.1学习目标本案例中实现了一个简单的文本编辑器,程序效果如图7-8示

图7-8我的记事本

7.2.2程序实现1.创建程序框架使用AppWizard创建基于MDI的应用程序框架,在AppWizard的最后一步(第6步)选项时,选择视图基类为CEditView,如图7-9所示。2.资源编辑转到资源编辑窗口,打开串表编辑器,对ID为IDR_MAINFRAME的字符串进行修改,该字符串决定了MDI应用程序的标题,将其改为“我的记事本”。再对ID为IDR_MYPRO3TYPE的字符串进行修改,该字符串决定所创建的文档类型。将字符串内容修改为“文档\n\\文档\nMyDoc(*.mdc)\n.mdc\n记事本.Document\n记事本Document”。

到这里,程序设计完成,编译并运行,看看是不是一个不错的文本文档编辑器。这个例子演示了CEditView类的强大功能,基本上我们什么也没做,就得到了一个实用的程序。当然,这还只是一个基础,能实现的功能还不太多,可以添加自己的代码以实现特定的功能。

图7-9选择视图类的基类

7.2.3知识要点1.视图类视图类的主要功能是显示文档数据,并接受用户对数据的修改。它以图形化方式将数据显示出来,并提供了与用户交互的接口,将用户的输入操作解释为对文档对象的操作。,视图类是文档与用户间进行联系的纽带,当用户打开一个窗口或分割一个窗口时,程序框架就会构造一个视图对象与文档相关联,。当文档对象发生变化时,与该文档连接的所有视图都应当作出反应,这一过程通过调用CDocument::UpdateAllViews()函数来得到实现。CView类成员不太多,同CDocument类似,它也只提供了基础、必要的框架,用户通过对该类的派生来充实所需的功能。下面对该类重要的成员函数进行简单说明。(1)OnDraw()通常通过修改该函数来完成文档数据的显示。(2)OnUpdate()对文档数据的正确显示起到必要的支持。

(4)OnEndPrinting()结束打印时调用该函数,重载该函数以释放资源(5)OnPreparePrinting()在文档被打印或预览之前调用该函数,重载该函数以初始化Print对话框。(6)OnPrint该函数负责打印或预览文档。(7)OnEndPinrtPreview在退出预览时调用该函数,将主框架窗口恢复到打印预览之前的状态。CView类只提供了基础框架,在MFC中派生了CView类的许多子类,为不同的应用提供了强大支持,在此之前我们已经见过了可以滚动视图的CScrollView类。下面对其他视图派生类作简单介绍。这些视图类大多都不是直接派生于CView类,而是派生于CView的子类CCtrlView,CCtrlView类的派生类对应于Windows通用控件,提供了与通用控件相对应的功能。

2.派生视图类(1)CEditView类CEditView类提供了一个简单的多行文本编辑器的视图,主要支持编辑控件的相应功能,可以将CEditView用作对话框中的一个控件,也可以将它用作文档的视图。(2)CRichEditView类CRichEditView类提供了比CEditView更强大的功能,就如同编辑控件与Rich控件的比较一样,它使你能够使用带格式编辑的文档视图。使用该视图可以输入和编辑文本,文本可实现字符或段落的格式化,也可以嵌入OLE对象,为格式化文本提供了设计界面。可以按照本节案例的方法创建CRichEditView视图应用程序,在最后一步时将视图基类设为CRichEditView。(3)CTreeView类CTreeView类可以在文档/视图结构中使用树控件的功能,用于显示具有层次结构的数据,如同Windows资源管理器文件夹一样。

(4)CListView类CListView

类提供了列表控件和CListCtrl的功能,使用文档/视图结构实现了对列表控件的功能。(5)CFormVie

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论