MFC OnDraw 与 OnPaint

MFC OnDraw vs. OnPaint

提问人:Aaron Solomon 提问时间:4/2/2022 最后编辑:IInspectableAaron Solomon 更新时间:4/3/2022 访问量:690

问:

我想知道 MFC 和 中的区别。OnDraw()OnPaint()

在网上搜索了一段时间后,我找到了一篇有用的文章。综上所述,

  1. WM_PAINT将触发 ,它调用并传递一个:OnPaint()OnDraw()CDC*

    void CView::OnPaint()
    {
        // standard paint routine
        CPaintDC dc(this);
        OnPrepareDC(&dc);
        OnDraw(&dc);
    }
    
  2. 另一篇文章提到,在打印文档时,也通过传递打印机 DC 进行调用。因此,通过覆盖,您可以在一个功能中获得丝网绘画和印刷,这很方便。OnPrint()OnDraw()OnDraw()

我试着把我的陈述放在任何一个和.两者都可以很好地工作。 更容易一些,因为它已经得到了一个指针.OnDraw()OnPaint()OnDraw()pDC

MFC OnDraw OnPaint WM-Paint

评论

0赞 user51187286016 4/2/2022
OnPaint是 的方法。 是类中的一种方法,更通用。 继承。CPluginWindowOnDrawCViewCPluginWindowCView
1赞 Adrian Mole 4/2/2022
@user51187286016 是 CWnd 类中的消息处理例程,CWnd 类是(几乎)从中派生所有其他 MFC 窗口和视图类型的基类。OnPaint

答:

4赞 IInspectable 4/3/2022 #1

设备上下文是一个古老的抽象概念。早在 1982 年的第一版《计算机图形学:原理与实践》(可能更早)中就对它们进行了描述,直到今天似乎还让人们感到困惑。

设备上下文的主要用途是抽象呈现设备(如显示器、打印机、内存中位图等)的特性,并提供连贯的接口。呈现到设备上下文中的代码通常不需要知道哪个设备最终使用呈现命令。

标题为“在视图中绘图”的文档条目继续解释了系统的工作原理: 简而言之,所有绘制都应该在接收设备上下文的覆盖中执行。然后,系统提供的实现构造 并调用 。OnDrawOnPaintCPaintDCOnDraw

到目前为止,这似乎只是一种过于复杂的渲染窗口内容的方法。当您实现打印支持时,事情就开始变得有意义了。现在,您所要做的就是设置打印设备上下文并调用 。实施中的任何内容都不需要更改。OnDrawOnDraw