绘制在视图

关闭在应用程序的所有绘图在视图中 OnDraw 成员函数时,您的视图类必须重写。 (例外情况是鼠标绘制,讨论在 解释通过视图中的用户输入。)您的 OnDraw 重写:

  1. 通过调用提供的文档成员函数获取数据。

  2. 通过调用该结构传递给 OnDraw设备上下文对象的成员函数显示数据。

当文件中的数据以某种方式更改时,必须重绘视图反映更改。 通常,那么,当用户通过视图进行更改文档中,则会出现此错误。 在这种情况下,视图调用文档的 UpdateAllViews 成员函数通知在同一的所有视图文档更新自身。 UpdateAllViews 调用每个视图的 OnUpdate 成员函数。 OnUpdate 的默认实现无效视图的整个工作区。 您可以重写其无效映射到文档的修改后的部分工作区的这些区域。

CDocumentUpdateAllViews 成员函数和类 CViewOnUpdate 成员函数可通过信息介绍修改了文档的哪些部分。 此 “提示” 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 对象是构造函数已被调用 BeginPaintCPaintDC 。 对绘制的函数传递设备上下文指针进行。 有关计算机的信息上下文和绘图调用,请参见 " MFC 引用使用 windows 对象一起使用的类 CDC

有关更多示例编写 OnDraw,如何请参见 MFC 示例

请参见

参考

使用视图