WinForms绘制周期文档?

WinForms绘制周期文档?,winforms,paint,Winforms,Paint,WinForms中是否有关于绘制周期的文档 在Windows中编程时,绘制周期通常采用以下形式: sent a WM_PAINT message { call BeginPaint(&paintStruct) //BeginPaint sends WM_NCPAINT and WM_ERASEBKGND sent a WM_ERASEBKGND message { i can: - allow defau

WinForms中是否有关于绘制周期的文档

在Windows中编程时,绘制周期通常采用以下形式:

sent a WM_PAINT message
{
   call BeginPaint(&paintStruct)

      //BeginPaint sends WM_NCPAINT and WM_ERASEBKGND
      sent a WM_ERASEBKGND message
      {
         i can:
           - allow default processing (Windows will fill the area with the default background color (e.g. white)
           - erase and background myself (e.g. a gradient) and prevent default processing
           - do nothing (letting whatever was there before me stay there) and prevent default processing
      }

   perform whatever painting i desire on 
         paintStruct.hDC (Device Context)
         paintStruct.rcPaint (Invalid Rectangle)
   that was populated into paintStruct during BeginPaint

   call EndPaint()
}
这些都记录在MSDN上:

我找不到任何关于WinForms及其绘制周期的文档。我可以随机找到名称为paint的方法和事件:

受保护的方法引发绘制事件。 受保护的方法引发绘制事件。 受保护的方法引发指定控件的绘制事件。 公共活动 受保护的方法引发指定控件的PaintBackground事件。 受保护的方法绘制控件的背景。 注意:忽略没有PaintBackground事件的事实


是否有文件说明这些实体之间的设计关系?WinForms中有关于绘制周期的文档吗?

这就是您要找的吗

OP Edit:当Microsoft实施下一轮链接中断时,文档的位置为:

MSDN技术资源库 开发工具和语言 VisualStudio2010 Visual Studio 创建基于Windows的应用程序 Windows窗体 Windows窗体入门 Windows窗体控件 使用.NET Framework开发自定义Windows窗体控件 自定义控件绘制和渲染

它与本机Windows绘制周期没有本质上的区别,相应的Windows消息会引发.NET事件。从底部开始,这些消息由窗口管理器或应用程序本身调用Invalidate生成。.NET版本为Control.Invalidate。Windows跟踪窗口的更新区域,决定是否传递WM_PAINT、WM_NCPAINT和WM_ERASEBKGND消息

打开ControlStyles.UserPaint样式时,Control.WndProc会识别WM_PAINT和WM_ERASEBKGND消息。它调用虚拟OnPaint和OnPaintBackground方法。派生控件可以根据需要重写这些方法以自定义绘制。并且必须调用基方法。最终到达Control.OnPaint/Background方法,该方法触发Paint和PaintBackground事件,以允许其他代码自定义绘制


唯一的另一个缺点是双缓冲,由DoubleBuffered属性启用。Winforms为控件创建位图缓冲区,并运行OnPaintBackground和OnPaint,传递从该位图创建的图形对象。然后将位图显示在屏幕上。

我们开始缺少文档,但是UserPaint文档说如果为false,则不会引发绘制事件。这是否意味着油漆事件未引发?或者这是否意味着不会调用OnPaint方法?“我注意到不透明”如果为true,则控件绘制为不透明且背景未绘制,这将对OnPaintBackground产生任何影响。我看到了更多:Allpaintingwmpaintoptimizeddoublebuffer。我将接受Jason的答案。严格地说,我要求提供文件。虽然MSDN文档可能非常不足,但这正是我所寻找的。虽然这个答案非常有用,但是+1作为MSDN的补充。