第11章文档视图结构全解.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(2) 保存文档流程图 将数据序列化到存档时,存档积累数据,直到其缓冲区被填满为止。然后,存档将其缓冲区写入 CArchive 对象指向的 CFile 对象。 同样,当从存档中读取数据时,存档会将数据从文件读取到它的缓冲区,然后从缓冲区读取到反序列化的对象。这种缓冲减少了物理读取硬盘的次数,从而提高了应用程序的性能。   CArchive使用缓冲区作为临时数据存储地,读写都先依次排列到此缓冲区,当缓冲区满或用户要求时,将此段整理后的数据读写到指定的存储介质。 好比火车货场装运零散的货物被收集,当总量到达火车运量的时候,由火车装运走。 如果用户执行了Save或Save As操作,则将文档的修改标志置为假。这样,当用户关闭文档的最后一个视图时,框架根据该修改标记决定是否提示用户保存文档中的数据到文件。如果用户上次作了修改还没有存盘,则弹出一个消息框,提示是否保存文件。 11.3 视图类 11.3.1 视图类的结构及其方法 1.视图类的结构 视图类具有CWnd的所有功能,如:创建、移动、显示和隐藏窗口等。CView类可以接收任何Windows消息,而CDocument类则不行 11.3.1 视图类的结构及其方法 2.视图类的方法 (1)CView中的一般方法 (2)虚拟方法 视图类常用方法 一个视图类可以通过GetDocument( )函数得到和它关联的文档的指针,进一步可以得到文档中保存的数据。 当一个文档对象的数据发生变化时,该文档对象可以通过调用成员函数UpdateAllView( )作出响应,刷新所有的视图,这个函数是维护数据正确显示的常用手段。 CView类中最常用的是OnDraw函数,该函数在屏幕发生变化或因为焦点的变化需要重绘时调用,没有该函数,就不可能在程序的切换后保证屏幕的正确显示。 尽量不要在OnDraw之外的函数调用绘图方法,那些方法不会在视图需要重新绘制的时候被自动调用。 若想在数据更新的时强制视图更新,可调用Invalidate方法和UpdateWindow方法来实现。 11.3.2 视图类的派生类 1.CEditView 支持类似编辑控件所要实现的功能,常见的文本操作,基本上都是由该类支持实现的。值得注意的是,该类的直接基类不是CView类,而是类CCtrlView 2.CRichEditView 主要提供Rich文本操作的支持(Rich文本是既可以为文本,也可以为图形的一种特殊格式文本) 3.CTreeView 主要提供一些树型控件所实现的功能的支持。它使一种数据的显示方式可以更富于变化。 4. CListView 该类与类CTreeView一样,更多的好处在于提供了一种简捷地实现数据的不同显示的途径 5.CScrollView 它主要提供视图的滚动显示。需要注意的是,该类的直接基类是CView类 11.4 文档/视图结构应用实例 例11-1 创建一个单文档应用程序,在应用程序的主窗口中显示一行文本“Welcome to SDI!”。在“编辑”菜单上有一个菜单项“改变显示文本”,单击该项可以弹出一个对话框,通过这个对话框可以改变主窗口中的显示文本。 (1) 创建项目文件 (2) 添加资源。为程序添加如图11-4所示的Input对话框,ID值为IDC_INPUT_DIALOG。然后使用ClassWizard为对话框新生成一个CDialog类的派生类CInputDlg 为其中IDC_INPUT_EDIT的编辑框控件添加相关联的成员变量m_Input。 (3) 为CInputDlg添加成员变量m_Str ID 变量名称 变量类型 IDC_INPUT_EDIT m_Input CString 在CMySdiDoc的定义中: class CMySdiDoc : public CDocument { // Attributes public: CString m_Str;//添加成员变量 } (4) 文档变量初始化 BOOL CMySdiDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; // TODO: add reinitialization code here m_Str=Welcome to SDI!; //初始化文档变量 // (SDI documents will reuse this document) return TRUE; } (5) 视图的输出--在客户区的固定位置显示字符串 void CMySdiView::OnDraw(CDC* pDC) { CMysdiDoc* pDoc = GetDocument(); //获取与视图关联的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档