【发布时间】:2013-04-16 15:53:14
【问题描述】:
我正在尝试学习 MFC 文档视图应用程序。我开始创建一个简单的图像查看器应用程序。为此,我从 CScrollView 类派生了我的视图类并覆盖了 draw() 函数。
我想知道什么时候使用 OnPaint() 函数以及它与 draw() 函数的关系。
【问题讨论】:
标签: visual-c++ mfc
我正在尝试学习 MFC 文档视图应用程序。我开始创建一个简单的图像查看器应用程序。为此,我从 CScrollView 类派生了我的视图类并覆盖了 draw() 函数。
我想知道什么时候使用 OnPaint() 函数以及它与 draw() 函数的关系。
【问题讨论】:
标签: visual-c++ mfc
您不应该在同一个视图中同时需要 OnPaint 和 OnDraw 函数。根据Microsoft's documentation:
当视图变得无效时,Windows 会向它发送 WM_PAINT 消息。视图的 OnPaint 处理函数通过创建 CPaintDC 类的设备上下文对象响应消息并调用视图的 OnDraw 成员函数。您通常不必编写重写 OnPaint 处理程序函数。
通过将绘图代码拆分为自己的函数,该框架允许您重用它来绘制屏幕和打印。
【讨论】:
OnPaint 对于视图来说几乎总是错误的——当它正确时,它通常涉及高级的东西。例如,当您尝试进行双重或三重缓冲时,您可能希望同时覆盖这两者,并且需要兼顾设备上下文。正如文档所述,将绘图保留在 OnDraw 中。
OnDraw 相应地绘制内容。