1、在程序启动时生成客户区的时候调用一次
2、客户区更改、移动或覆盖也会调用(多次)
3、应用程序中几乎所有的绘图都在视图的 OnDraw
成员函数中发生,必须在视图类中重写该成员函数。
OnDraw 重写:
(1).通过调用您提供的文档成员函数获取数据。
(2).通过调用框架传递给 OnDraw 的设备上下文对象的成员函数来显示数据。
当文档的数据以某种方式更改后,必须重绘视图以反映该更改。一般情况下,这在用户通过视图在文档上做更改时发生。在此情况下,视图调用文档的UpdateAllViews 成员函数,通知同一文档上的所有视图对自身进行更新。UpdateAllViews 调用每个视图的 OnUpdate 成员函数。默认的 OnUpdate 实现使视图的整个工作区无效。可以重写默认的 OnUpdate 实现,仅使工作区中映射到文档修改部分的那些区域无效。
CDocument 类的 UpdateAllViews 成员函数和 CView 类的 OnUpdate 成员函数使您得以传递描述被修改的文档部分的信息。此“提示”机制使您得以限制视图必须重绘的区域。OnUpdate 采用两个“提示”参数。第一个是 lHint,它属于 LPARAM 类型,使您得以传递所需的任何数据;而第二个是 pHint,它属于CObject* 类型,使您得以将指针传递给从 CObject 派生的任何对象。
当视图变得无效时,Windows 将 WM_PAINT 消息发送给它。该视图的 OnPaint 处理函数通过创建 CPaintDC 类的设备上下文对象来响应该消息并调用视图的OnDraw
成员函数。通常不必编写重写的 OnPaint
处理成员函数。
设备上下文是包含设备(例如显示器或打印机)绘图属性信息的 Windows 数据结构。所有的绘图调用都通过设备上下文对象进行。对于屏幕上的绘图,CPaintDC对象传递给 OnDraw
。对于打印机上的绘图,为当前打印机设置的 CDC 对象传递给 OnDraw
。
视图中的绘图代码首先检索指向文档的指针,然后通过设备上下文进行绘图调用。