像机输入信号等,文档对象负责来
自所有数据源的数据的管理。
视图是数据的显示窗口,为用户提供了文档的可视的数据显示,它把文档的部分或全部
内容在窗口中显示出来。视图还为用户提供了一个与文档中的数据jiāo互的界面,它把用户的
输入转化为对文档中数据的cāo作。一个文档可以有多个不同的视图。比如,在Excel 电子表
格中,可以将数据以表格方式显示,也可以将数据以图表方式显示。一个视图既可以输出到
窗口中,也可以输出到打印机上。图2-19 显示了文档-视图结构中的文档与视图的关系。
图2-19 文档与视图的关系
枫叶文学网www.fywxw.com
第2 章 应用程序基本框架
·27·
MFC 的文档视图结构机制把数据同它的显示以及用户对数据的cāo作分离开来,所有对数
据的修改由文档对象来完成,视图调用这个对象的方法来访问和更新数据。
CDoccomnt 类的UpdateAllViews()成员函数和CView 类的OnUpdate()成员函数传递描述
被修改的文档部分的信息。上述机制可限制视图必须重绘的区域。当视图变得无效时,
Windows 将WM_PAINT 消息发送给它,该视图的OnPaint()函数处理函数通过创建CPaintDC
类的设备上下文对象来响应该消息并调用视图的OnDraw()成员函数,通常不必编写重写的
OnPaint()处理成员函数。设备上下文是包含设备(例如显示器或打印机)绘图属xìng信息的
Windows 数据结构,所有的绘图调用都通过设备上下文对象进行。对于屏幕上的绘图,
CPaintDC 对象传递给OnDraw()函数。对于打印机上的绘图,为当前打印机设置的CDC 对象
传递给OnDraw()函数。视图中的绘图代码首先检索指向文档的指针,然后通过设备上下文进
行绘图调用,下面简单的OnDraw()函数示例阐释了该过程:
void CMyView::OnDraw( CDC* pDC )
{
CMyDoc* pDoc = GetDoccomnt();
CString s = pDoc->GetData(); // Returns a CString
CRect rect;
GetClientRect( &rect );
pDC->SetTextAlign( TA_BASELINE | TA_CENTER );
pDC->TextOut( rect.right / 2, rect.bottom / 2,
s, s.GetLength() );
}
在此例中,将GetData()函数定义为派生文档类的成员,打印从文档获取的任何字符串,
并使字符串在视图中居中。如果OnDraw 调用用于屏幕绘图,则传递给pDC 的CDC 对象是
一个CPaintDC(它的构造函数已经调用BeginPaint)对象,对绘图函数的调用通过设备上下
文指针进行。
文档的大小经常比它的视图可以显示的大小要大,之所以会发生这种情况,是因为文档