C++开发博客CSDN

SetStyle 双缓冲技术实现绘制图形不闪烁

public class  CustomListView  :  System.Windows.Forms.ListView 

     
public  CustomListView() 
     { 
         SetStyle(ControlStyles.DoubleBuffer
|ControlStyles.AllPaintingInWmPaint 
                   |ControlStyles.UserPaint,true); 
         UpdateStyles(); 
     } 

双缓冲技术实现绘制图形不闪烁

protected void SetStyle (
 ControlStyles flag,
 bool value
)

如果将 AllPaintingInWmPaint 位设置为 true,则将忽略 WM_ERASEBKGND 窗口消息,

而直接从 WM_PAINT 窗口消息调用 OnPaintBackground 和 OnPaint 方法。

这通常可减少闪烁,除非其他控件将 WM_ERASEBKGND 窗口消息发送到该控件。

可以发送 WM_ERASEBKGRND 窗口消息以达到与 SupportsTransparentBackColor 相似的假透明效果;

例如,具有平面外观的 ToolBar 就采用这种方法。
若要完全启用双缓冲,可以将 OptimizedDoubleBuffer 和 AllPaintingInWmPaint 位设置为 true。

但是,启用双缓冲的首选方法是将该控件的 DoubleBuffered 属性设置为 true,这会产生同样的结果。

 ListView . DoubleBuffered 属性
此成员重写 Control . DoubleBuffered ,且该主题可能包括更完整的文档。

获取或设置一个值,该值指示此控件是否应使用辅助缓冲区重绘其图面,以减少或避免闪烁。

命名空间:   System.Windows.Forms
程序集:   System.Windows.Forms(在 System.Windows.Forms.dll 中)
 
protected override bool DoubleBuffered { get; set; }

属性值

类型: System . Boolean
如果应使用双缓冲绘制控件的图面,则为 true;否则为 false
成员名称说明
AllPaintingInWmPaint如果为 true,控件将忽略 WM_ERASEBKGND 窗口消息以减少闪烁。仅当 UserPaint 位设置为 true 时,才应当应用该样式。
CacheText如果为 true,控件保留文本的副本,而不是在每次需要时从 Handle 获取文本副本。此样式默认为 false。此行为提高了性能,但使保持文本同步变得困难。
ContainerControl如果为 true,则控件是类似容器的控件。
DoubleBuffer如果为 true,则绘制在缓冲区中进行,完成后将结果输出到屏幕上。双重缓冲区可防止由控件重绘引起的闪烁。如果将 DoubleBuffer 设置为 true,则还应当将 UserPaintAllPaintingInWmPaint 设置为 true
EnableNotifyMessage如果为 true,则为发送到控件的 WndProc 的每条消息调用 OnNotifyMessage 方法。此样式默认为 falseEnableNotifyMessage 在部分可信的情况下不工作。
FixedHeight如果为 true,则自动缩放时,控件具有固定高度。例如,如果布局操作试图重新缩放控件以适应新的 Font,则控件的 Height 将保持不变。
FixedWidth如果为 true,则自动缩放时,控件具有固定宽度。例如,如果布局操作试图重新缩放控件以适应新的 Font,则控件的 Width 将保持不变。
Opaque如果为 true,则控件被绘制为不透明的,不绘制背景。
OptimizedDoubleBuffer如果为 true,则该控件首先在缓冲区中绘制,而不是直接绘制到屏幕上,这样可以减少闪烁。如果将此属性设置为 true,则还应当将 AllPaintingInWmPaint 设置为 true
ResizeRedraw如果为 true,则在调整控件大小时重绘控件。
Selectable如果为 true,则控件可以接收焦点。
StandardClick如果为 true,则控件将实现标准 Click 行为。
StandardDoubleClick如果为 true,则控件将实现标准 DoubleClick 行为。如果 StandardClick 位未设置为 true,则忽略此样式。
SupportsTransparentBackColor如果为 true,控件接受 alpha 组件小于 255 的 BackColor 以模拟透明。仅在 UserPaint 位设置为 true 并且父控件派生自 Control 时才模拟透明。
UserMouse如果为 true,则控件完成自己的鼠标处理,因而鼠标事件不由操作系统处理。
UserPaint如果为 true,控件将自行绘制,而不是通过操作系统来绘制。如果为 false,将不会引发 Paint 事件。此样式仅适用于派生自 Control 的类。
UseTextForAccessibility指定该控件的 Text 属性的值,如果已设置,则可确定该控件的默认 Active Accessibility 名称和快捷键。
posted @ 2011-09-14 20:50  纳凉亭子  阅读(494)  评论(0编辑  收藏  举报