绘制在视图
关闭在应用程序的所有绘图在视图中 OnDraw 成员函数时,您的视图类必须重写。(例外情况是鼠标绘制,讨论在 解释通过视图中的用户输入。)您的 OnDraw 重写:
通过调用提供的文档成员函数获取数据。
通过调用该结构传递给 OnDraw设备上下文对象的成员函数显示数据。
当文件中的数据以某种方式更改时,必须重绘视图反映更改。通常,那么,当用户通过视图进行更改文档中,则会出现此错误。在这种情况下,视图调用文档的 UpdateAllViews 成员函数通知在同一的所有视图文档更新自身。UpdateAllViews 调用每个视图的 OnUpdate 成员函数。OnUpdate 的默认实现无效视图的整个工作区。您可以重写其无效映射到文档的修改后的部分工作区的这些区域。
类 CDocument 的 UpdateAllViews 成员函数和类 CView 的 OnUpdate 成员函数可通过信息介绍修改了文档的哪些部分。此 “提示” framework 允许您对视图必须重绘的区域。OnUpdate 采用两个 “提示”参数。第一, lHint,类型 LPARAM,可以通过您喜欢的任何数据,,而第二, pHint,类型 CObject*,可以通过指向 CObject从派生的任何对象。
在视图变为无效时,窗口发送它 WM_PAINT 信息。视图的 OnPaint 处理程序函数响应消息通过创建类 CPaintDC 设备上下文对象并调用您的意图的 OnDraw 成员函数。您通常不需要编写一个重写的 OnPaint 处理程序函数。
设备上下文 是包含有关计算机绘图特性的信息 (如显示或打印机的 windows 数据结构。所有绘图调用通过设备上下文对象进行。对于绘制到屏幕, OnDraw 通过 CPaintDC 对象。对于绘制到打印机,它通过为当前打印机设置的 CDC 对象。
您的绘制的代码在视图先检索指向文档,然后进行绘图通过设备上下文调用。下面的简单 OnDraw 示例演示过程:
void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
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 对象是构造函数已被调用 BeginPaint的 CPaintDC 。对绘制的函数传递设备上下文指针进行。有关计算机的信息上下文和绘图调用,请参见 " MFC 引用 和 使用 windows 对象一起使用的类 CDC 。
有关更多示例编写 OnDraw,如何请参见 MFC 示例。