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事件。”)Paint
(公共活动)InvokePaintBackground
(受保护的方法“为指定的控件引发PaintBackground事件。”OnPaintBackground
(受保护的方法“绘制控件的背景。”)注意:忽略没有
PaintBackground
事件的事实
是否有文档描述这些实体之间的设计关系? WinForms中是否有关于绘制周期的文档?
答案 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实施下一轮链接破解时,文档的位置为: