- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章 和视图的分离
第11章 文档和视图的分离 本章是MFC程序设计的核心章节之一,MFC的核心就是在于“文档-视图”结构。虽然不必要求读者要设计出类似于MFC这样的“文档-视图”结构的应用程序框架,不过如果能理解MFC的“文档-视图”结构的理论,对以后Windows程序设计的深入学习,是很帮助的。本章的主要内容有: 文档和视图相互作用的函数:读者可以学到文档和视图相互作用的理论本质,并学会文档和视图相互作用的函数的使用和原理。 CView类的派生类:读者可以学到MFC视图家族的视图类结构理论,已经使用这些理论编写文档和视图高级交互的简单实例。 多视图:读者可以学到多视图的理论知识和学会多视图的程序设计。 11.1 文档和视图相互作用的函数 文档和视图相互作用是通过成员函数来进行消息传递或相互调用的,它们之间相互作用的函数主要有: CView::GetDocument():该函数是在当前视图中获取文档。 CDocument::UpdateAllViews():该函数是更新所有的视图,在“文档-视图”结构中,一个文档往往对应于一个或多个视图,因此文档的改变可以更新部分视图,也可以更新所有视图。 CViews::OnUpdate():视图的自我更新。 CView::OnInitialUpdate():初始化更新界面。 CDocument::OnNewDocument():在文档中再创建一个新文档。 11.1.1 获取当前文档:CView::GetDocument()函数 一个视图只能对应一个文档,在视图类成员函数中使用GetDocument()可以返回一个与当前视图相关联的文档,如果当前的用户输入了新的文档数据,使用该函数可以实时地返回最新版本的文档,该函数的原型如下代码所示: CDocument* GetDocument( ) const; 从函数原型可以看出,该函数不允许在函数体内修改视图类的成员,而且返回一个指向CDocument的指针,利用该指针,开发者可以指向CDocument对象或是CDocument派生类的对象,从而可以访问文档类的成员函数或公有数据成员。 在一个单文档的MFC“test”项目中,可以查看到系统默认生成的GetDocument()函数代码如下: CTestDoc* CTestView::GetDocument() { ASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CTestDoc))); return (CTestDoc*)m_pDocument; } 11.1.2 更新所有视图:CDocument::UpdateAllViews()函数 一个文档可以对应一个多若干个视图,有时可能会遇到要一次性更新所有视图的情况,在这种情况下,使用UpdateAllViews()就是最简单的,如果UpdateAllViews()在视图类的成员函数中被调用,则可以通过视图类的成员函数GetDocument()来间接调用: GetDocument()-UpdateAllViews(this) ; 11.1.3 视图自我更新:CViews::OnUpdate()函数 当程序调用了UpdateAllViews()函数时,所有的应用程序框架都会相应地调用CViews::OnUpdate()函数。不过,如果相单独更新一个视图,或在一个视图中实现自我更新,可以直接在视图类中调用OnUpdate()函数。 11.1.4 初始化更新界面:CView::OnInitialUpdate()函数 CView::OnInitialUpdate()的调用发生在诸如用户从“File”菜单中选择了“New”菜单项,或选择了“Open”菜单项。如果是使用派生的视图类,则一定要在派生的视图类的OnInitialUpdate()函数调用基类的OnInitialUpdate()函数。 11.1.5 创建新文档:CDocument::OnNewDocument()函数 在MFC应用程序中,不管是MDI还是SDI应用程序,只要用户使用“File”菜单中的“New”命令,则应用程序框架就会构造一个文档对象,进而调用OnNewDocument()函数,而在调用OnNewDocument()时可以设置文档数据成员的初始值。 注意:在“文档-视图”框架中,使用应用程序向导生成的应用程序并不需要做太多的工作,在默认生成的代码中,文档和视图的相互关系已经梳理好,开发者在这个关系前提下直接使用即可。 11.2 一个简单的文档视图应用程序的创建和分析 由于MFC程序是看不到main()函数的入口的,唯一的一个入口就是一个全局的应用程序对象: CTestApp theApp; 这个对象的创建,虽然是简单的一行,但它的创建是基于应用程序框架类、
您可能关注的文档
- 大摩——尽职调查范本(国际并购重组).ppt
- 戴姆勒-克莱斯勒的并购.ppt
- 导论 8_港口水路域设施.ppt
- 岛津lc-10at操作规程.ppt
- 导论 9 港口路域设施.ppt
- 岛津气相色谱培训教程.ppt
- 岛津气相色谱维护培训.ppt
- 岛津液相色谱维护基础知识.ppt
- 地理 《地理环境对区域发展的影响》1 .ppt
- 地理环境整体性和区域差异.ppt
- 2018年普通高等学校招生全国统一模拟考试理综-化学试题扫描版含答案.doc
- Unit6SunshineforallStudyskills课件-牛津译林版八年级英语下册.pptx
- Unit3After-schoolactivitiesLesson2Avisittoafarm课件冀教版(2024)英语七年级下册.pptx
- 第13课《最后一次讲演》课件-统编版语文八年级下册.pptx
- Unit2BesportybehealthyReading课件-牛津译林版(2020)高中英语.pptx
- Unit2Differentfamilies第三课时(课件)-人教PEP版(2024)英语三年级上册.pptx
- 服务业的区位选择教学课件-湘教版高中地理必修二.pptx
- 城镇化进程及其影响课件高中地理湘教版(2019).pptx
- 国家海洋权益与海洋发展战略课件高一地理中图版必修2.pptx
- 工程变更管理细则.doc
文档评论(0)