vc++6.0入门【第八章_和视图】.doc

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
vc6.0入门【第八章_和视图】

第8章 文档和视图 精讲 MFC应用程序的核心是文档/视图结构。在前面章节的学习中,已经接触了不少文档/视图结构的应用程序,本章将详细分析其结构和原理,并进一步学习使用复杂的文档结构、构造更加丰富的视图。 8.1 文档/视图概述 使用MFC的AppWizard可以创建三种类型的应用程序: 单文档界面的应用程序(SDI:Single Document Interface) 多文档界面的应用程序(MDI:Multiple Documents Interface) 基于对话框的应用程序(Dialog based) 基于对话框的应用程序框架非常简单,由应用程序类、对话框类构成。通过应用程序类的 InitInstance()函数,构造一个模式对话框对象;调用DoModal()函数,让Windows对话框处理程序象通常情况一样接受和分配消息;用户退出对话框后,程序也就结束了。 我们已经知道SDI应用程序由应用程序类(CWinApp)、框架窗口类(CFrameWnd)、文档类(CDocument)、视图类(CView)和文档模板类(CSingleDocTemplate)共同作用。MDI应用程序与SDI应用程序的主要差别在于:MDI有CMDIFrameWnd和CMDIChildWnd两个框架窗口类,前一个派生CMainFrame类,负责菜单等界面元素的主框架窗口管理;后一个派生CChildFrame类,负责相应的文档及其视图的子框架维护。而SDI由框架窗口类CFrameWnd 派生CMainFrame类。 一个文档可以有多个视图,但一个视图只能对应一个确定的文档。因此,MDI应用程序需要解决的问题是多个文档的数据管理方法。在MDI应用程序中,文档模板只支持主窗口。每打开一个新文档时,都调用文档类的成员函数OnNewDocument(),建立一个由CMDIChildWnd派生的新的MDI子窗口,在子窗口中保存已打开的文档,所有这些细节都由MFC库来处理。 8.1.1 文档和视图的关系 文档/视图结构的最大特点就是:把数据操作和数据表示分离开来,与数据库管理系统提供的数据库与视图的关系一致。图8-1说明了文档及其视图之间的关系。所有对数据的修改由文档对象来完成,用视图调用这个对象的方法来访问和更新数据。 图8-1文档和视图的关系 在MFC应用程序框架中,文档和视图的关系主要体现在:文档类和视图类对象的相互作用和相互访问上。如前面章节所述,关系图示如下: 图8-2 文档和视图的相互访问 对图示中的函数介绍如下: CView::GetDocument( ) 返回文档类的指针,通过该指针在视图类中访问并更新文档数据。 CDocument::UpdateAllViews(CView *pSender,LPARAM lHint=0,Cobject *pHint=NULL) 该函数通知与文档相连的所有或部分视图,更新窗口内容。在MFC应用程序框架中,由于文档和视图的一对多关系,当用户在一个视图中修改文档后,本视图将发生改变,相应地,与文档相连的其他视图也应与更新后的文档内容保持一致。这时,本视图便可以调用该函数向其他视图窗口发出WM_PAINT消息,通知它们更新。 pSender为修改文档并发出更新通知的视图的指针,当pSender为NULL时通知与文档相连的所有视图更新,当pSender不为NULL时,通知除pSender代表的视图以外的与文档相连的所有视图更新,得到更新的视图类将调用该类的OnUpdate()函数。 lHint和pHint是关于视图更新内容的提示。lHint可自定义含义,pHint是一个CObject指针,能够表示MFC所有的对象,它规定了视图需要更新的区域。经常使用来规定部分刷新区域,从而避免全部区域刷新带来的屏幕闪动。 CView::OnUpdate( ) 该函数是一个虚函数,当应用程序调用CDocument::UpdateAllViews()函数时,应用程序框架会相应地调用它。还可以在应用程序视图类的派生类中,直接调用OnUpdate()函数,OnUpdate()函数访问文档,得到文档的数据,然后更新视图的数据成员或控制来反应这些变化。另外,OnUpdate()函数可以使视图的一部分无效,导致视图的OnDraw()使用文档数据来在窗口中重画。 CView::OnInitialUpdate( ) 该函数也是一个虚函数,当应用程序启动时,或者用户执行菜单命令File-New或File-Open时,就会调用这个虚函数。如果要初始化视图对象,可在视图类的派生类中重载该函数,添加初始化代码。当应用程序启动时,先调用OnCreate()函数,接着就调用OnInitialUpdate()函数。 在通常情况下,视图通过GetDocument()函

您可能关注的文档

文档评论(0)

精华文库 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:7111022151000002

1亿VIP精品文档

相关文档