WinForms绘制周期文档?

时间:2011-04-23 13:46:26

标签: 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 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上:Windows Development\Graphics and Multimedia\Windows GDI\Painting and Drawing\About Painting and Drawing

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

  • OnPaint(受保护的方法“引发Paint事件。”)
  • OnPrint(受保护的方法“引发Paint事件。”)
  • InvokePaint(受保护的方法“为指定的控件引发Paint事件。”)
  • Paint(公共活动)
  • InvokePaintBackground(受保护的方法“为指定的控件引发PaintBackground事件。”
  • OnPaintBackground(受保护的方法“绘制控件的背景。”)
  

注意:忽略没有PaintBackground事件的事实

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

2 个答案:

答案 0 :(得分:4)

与本机Windows绘制周期没有太大区别,.NET事件由相应的Windows消息引发。从底部开始,消息是通过窗口管理器或应用程序本身调用InvalidateRect()生成的。 .NET版本是Control.Invalidate()。 Windows跟踪为窗口更新区域的,决定是否提供一个WM_PAINT,WM_NCPAINT和WM_ERASEBKGND消息。

在WM_PAINT和WM_ERASEBKGND消息由Control.WndProc()当ControlStyles.UserPaint样式被接通识别。它调用虚拟OnPaint()和OnPaintBackground()方法。派生控件可以覆盖这些方法,以根据需要自定义绘制。并且必须调用基本方法。最终到达Control.OnPaint / Background方法,它会触发Paint和PaintBackground事件,以允许其他代码自定义绘画。

唯一的其他皱纹是双缓冲,由DoubleBuffered属性启用。 Winforms为控件创建一个位图缓冲区,并运行OnPaintBackground()和OnPaint(),传递从该位图创建的Graphics对象。然后将位图blits到屏幕。

答案 1 :(得分:1)

这是你在找什么?

MSDN: Custom Control Painting and Rendering


OP编辑:当Microsoft实施下一轮链接破解时,文档的位置为:

  • MSDN Library
    • 开发工具和语言
      • Visual Studio 2010
        • Visual Studio
          • 创建基于Windows的应用程序
            • Windows窗体
              • Windows窗体入门
                • Windows窗体控件
                  • 使用.NET Framework开发自定义Windows窗体控件
                    • 自定义控件绘画和渲染