第7章 文档及视图.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 7 章 文档与视图 7.1 文档/视图结构 7.2 简单的文档/视图结构应用程序 7.3 文档的读写 7.4 分割视图窗口 7.5 多文档的应用程序 7.6 应用实例 3.保存文档 4.关闭文档 当用户试图关闭文档(或退出应用程序)时,应用程序会根据用户对文档的修改与否 来进一步完成下列任务: (1) 若文档内容已被修改,则弹出一个消息对话框,询问用户是否需要将文档保存。若用户选择“是”,则应用程序执行OnFileSave()过程。 (2) 调用CDocument::OnCloseDocument()虚函数,关闭所有与该文档相关联的文档窗口及相应的视图,调用文档类CDocument的DeleteContents()清除文档数据。 序列化的基本思想是: 一个类应该能够对自己的成员变量的数据进行读写操作,对象可以通过读操作而重新创建。即对象可以将其当前状态(由其成员变量的值表示)写入永久性存储体(通常是指磁盘)中,以后可以从永久性存储体中读取(载入)对象的状态,从而重建对象,类的对象自己应该具备将状态值写入磁盘或从磁盘中读出的方法(即成员函数),这种对象的保存和恢复的过程称为序列化。 7.3.2 MFC文档序列化 MFC AppWizard向导生成的Seralize()函数由一个if-else结构组成,例如应用程序Li7_1中有如下代码: void CLi7_1Doc::Serialize(CArchive ar) { if(ar. IsStoring ( ) ) //写数据 { // TODO:add storing code here. } else //读数据 { // TODO:add loading code here. } } 【例7.4】继续完善例7.2的应用程序Mydraw,以便能将绘制好的图形保存在磁盘上。 7.3.3 自定义可序列化的类 要让用户定义的类支持序列化,必须满足以下5个条件: (1)从CObject类派生,这样派生类就具有RTTI(Run-time type information)、Dynamic Creation等功能。 (2)类的声明部分必须有DECLARE_SERIAL宏,此宏需要1个参数:类名称。 (3)类的实现部分必须有IMPLEMENT_SERIAL宏,此宏需要3个参数:一是类名称,二是基类名称,三是版本号。 (4) 重新定义Serialize( )虚函数,使它能够适当地把类的成员变量写入文件中。 (5) 为此类加上一个默认构造函数,这是因为如果一个对象来自文件,MFC必须先动态地创建它,而且在没有任何参数的情况下调用构造函数,然后才从文件中读取对象数据。 【例7.5】完善例7.3的应用程序Mycircle,利用序列化来保存文件,并使自定义类支持序列化。 7.4 分割视图窗口 分割窗口分为两类:动态分割窗口和静态分割窗口。 动态分割窗口是指:用户可以动态的分割和除去分割窗口,分割窗口会创建和删除相应的窗格。 静态分割窗口是指:在窗口创建时,分割窗口的窗格就已经创建好了,且窗格的数量和顺序不会改变。窗格为一个分割条所分割,用户可以拖动分割条调整相应的窗格的大小。 7.4.1 CSplitterWnd类 类CSplitterWnd是MFC类库中实现分割窗口的基类,根据需要可以从该类派生自己的分割窗口类。 分割窗口是含有多个窗格的窗口,每个窗格通常是应用程序特定的由CView派生类的对象,也可以是具有适当子窗口ID的任何CWnd对象。 类CSplitterWnd是类CWnd的派生类。 7.4.2 分割视图窗口的实现技术 1. 动态分割窗口 动态分割窗口是调用create()成员函数创建的,通常用于创建和滚动同一文档的多个窗格或视图,此处窗格或视图属于同一个类的窗格或视图。 【例7.6】 创建一个一行两列窗格的动态分割窗口的单文档应用程序Li7_6。 2.静态分割窗口 静态分割窗口是调用CreateStatic()成员函数创建的,通常用于创建同一文档的多个不同窗格或视图,而这里的多个窗格或视图往往是属于不同类,这些窗格在我们创建分割器时就必须各个创建,通常使用CreateView()函数创建窗格。 【例7.7】创建一个一行两列窗格的静态分割窗口的单文档应用程序Li

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档