VC++60入门【第八章 文档和视图】

VC++60入门【第八章 文档和视图】

ID:40712786

大小:1.10 MB

页数:39页

时间:2019-08-06

VC++60入门【第八章 文档和视图】_第1页
VC++60入门【第八章 文档和视图】_第2页
VC++60入门【第八章 文档和视图】_第3页
VC++60入门【第八章 文档和视图】_第4页
VC++60入门【第八章 文档和视图】_第5页
资源描述:

《VC++60入门【第八章 文档和视图】》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第6章创建和使用对话框第8章文档和视图精讲MFC应用程序的核心是文档/视图结构。在前面章节的学习中,已经接触了不少文档/视图结构的应用程序,本章将详细分析其结构和原理,并进一步学习使用复杂的文档结构、构造更加丰富的视图。8.1文档/视图概述使用MFC的AppWizard可以创建三种类型的应用程序:(1)单文档界面的应用程序(SDI:SingleDocumentInterface)(2)多文档界面的应用程序(MDI:MultipleDocumentsInterface)(3)基于对话框的应用程序(Dialogbased)基于对话框的应用程序框架非常简单,由

2、应用程序类、对话框类构成。通过应用程序类的InitInstance()函数,构造一个模式对话框对象;调用DoModal()函数,让Windows对话框处理程序象通常情况一样接受和分配消息;用户退出对话框后,程序也就结束了。我们已经知道SDI应用程序由应用程序类(CWinApp)、框架窗口类(CFrameWnd)、文档类(CDocument)、视图类(CView)和文档模板类(CSingleDocTemplate)共同作用。MDI应用程序与SDI应用程序的主要差别在于:MDI有CMDIFrameWnd和CMDIChildWnd两个框架窗口类,前一个派生CM

3、ainFrame类,负责菜单等界面元素的主框架窗口管理;后一个派生CChildFrame类,负责相应的文档及其视图的子框架维护。而SDI由框架窗口类CFrameWnd派生CMainFrame类。一个文档可以有多个视图,但一个视图只能对应一个确定的文档。因此,MDI应用程序需要解决的问题是多个文档的数据管理方法。在MDI应用程序中,文档模板只支持主窗口。每打开一个新文档时,都调用文档类的成员函数OnNewDocument(),建立一个由CMDIChildWnd派生的新的MDI子窗口,在子窗口中保存已打开的文档,所有这些细节都由MFC库来处理。8.1.1文档

4、和视图的关系文档/视图结构的最大特点就是:把数据操作和数据表示分离开来,与数据库管理系统提供的数据库与视图的关系一致。图8-1说明了文档及其视图之间的关系。所有对数据的修改由文档对象来完成,用视图调用这个对象的方法来访问和更新数据。39第6章创建和使用对话框ABCD15565587982232337310934542265143467447818752421190203数据文档视图图8-1文档和视图的关系在MFC应用程序框架中,文档和视图的关系主要体现在:文档类和视图类对象的相互作用和相互访问上。如前面章节所述,关系图示如下:CDocument::Upd

5、ateAllViews()文档类视图类CView::GetDocument()CView::OnInitialUpdate()CView::Invalidate()CView::InvalidateRect()图8-2文档和视图的相互访问对图示中的函数介绍如下:1.CView::GetDocument()返回文档类的指针,通过该指针在视图类中访问并更新文档数据。2.CDocument::UpdateAllViews(CView*pSender,LPARAMlHint=0,Cobject*pHint=NULL)该函数通知与文档相连的所有或部分视图,更新窗口

6、内容。在MFC应用程序框架中,由于文档和视图的一对多关系,当用户在一个视图中修改文档后,本视图将发生改变,相应地,与文档相连的其他视图也应与更新后的文档内容保持一致。这时,本视图便可以调用该函数向其他视图窗口发出WM_PAINT消息,通知它们更新。pSender为修改文档并发出更新通知的视图的指针,当pSender为NULL时通知与文档相连的所有视图更新,当pSender不为NULL时,通知除pSender代表的视图以外的与文档相连的所有视图更新,得到更新的视图类将调用该类的OnUpdate()函数。lHint和pHint是关于视图更新内容的提示。lHi

7、nt可自定义含义,pHint是一个CObject指针,能够表示MFC所有的对象,它规定了视图需要更新的区域。经常使用来规定部分刷新区域,从而避免全部区域刷新带来的屏幕闪动。3.CView::OnUpdate()39第6章创建和使用对话框该函数是一个虚函数,当应用程序调用CDocument::UpdateAllViews()函数时,应用程序框架会相应地调用它。还可以在应用程序视图类的派生类中,直接调用OnUpdate()函数,OnUpdate()函数访问文档,得到文档的数据,然后更新视图的数据成员或控制来反应这些变化。另外,OnUpdate()函数可以使视

8、图的一部分无效,导致视图的OnDraw()使用文档数据来在窗口中重画。1.CVi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。