- 1、本文档共39页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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()函
您可能关注的文档
- (精品书籍)23高级均线教程.doc
- (珊珊版)动能定理.doc
- (识图)初学预算人员必读.doc
- !“千岛湖·旅游”宣传推广策划案0527.ppt
- [成套]人教版高三历史必修1、2、3全套复习提纲+[人教版]【更多资料关注@高中学习资料库 】.doc
- [全套]初中英语中考复习资料超全语法、词组、句型、作文及知识点大全.doc
- [整理]名言名句复习资料【更多资料关注@高中学习资料库 】.doc
- _本科毕业论文设计模板 1.doc
- “经营之神”宗庆后.doc
- ] 钢筋识图入门.doc
- 2023-2024学年广东省深圳市龙岗区高二(上)期末物理试卷(含答案).pdf
- 2023-2024学年贵州省贵阳市普通中学高一(下)期末物理试卷(含答案).pdf
- 21.《大自然的声音》课件(共45张PPT).pptx
- 2023年江西省吉安市吉安县小升初数学试卷(含答案).pdf
- 2024-2025学年广东省清远市九校联考高一(上)期中物理试卷(含答案).pdf
- 广东省珠海市六校联考2024-2025学年高二上学期11月期中考试语文试题.pdf
- 2024-2025学年语文六年级上册第4单元-单元素养测试(含答案).pdf
- 2024-2025学年重庆八中高三(上)月考物理试卷(10月份)(含答案).pdf
- 安徽省安庆市潜山市北片学校联考2024-2025学年七年级上学期期中生物学试题(含答案).pdf
- 贵州省部分校2024-2025学年九年级上学期期中联考数学试题(含答案).pdf
文档评论(0)