在你的Toolbar的构造函数里加上
this.SetStyle(ViewStyles.UserPaint|ViewStyles.AllPaintingInWmPaint |ViewStyles.DoubleBuffer, true);
这样则绘制在缓冲区中进行,完成后将结果输出到屏幕上。双重缓冲区可防止由控件重绘引起的闪烁。要完全启用双重缓冲,还必须将 UserPaint 和 AllPaintingInWmPaint 样式位设置为 true。
具体看MSDN
this.SetStyle(ViewStyles.UserPaint|ViewStyles.AllPaintingInWmPaint |ViewStyles.DoubleBuffer, true);
这样则绘制在缓冲区中进行,完成后将结果输出到屏幕上。双重缓冲区可防止由控件重绘引起的闪烁。要完全启用双重缓冲,还必须将 UserPaint 和 AllPaintingInWmPaint 样式位设置为 true。
具体看MSDN
比较可靠,由外部程序来控制Paint消息。gzing....
public static extern int LockWindowUpdate (
IntPtr hwndLock
);
this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);
this.UpdateStyles();
还是用的不对?
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);
this.UpdateStyles();
你对窗体设置双缓冲当然没用,要想对ToolBar用双缓冲,你必须自己派生一个,既然是UserPaint,然后你就慢慢重新画一个ToolBar吧……
的构造函数里写这句
SetStyle ( ControlStyles.DoubleBuffer , true ) ; // 设置双缓冲,防止图像抖动
SetStyle ( ControlStyles.AllPaintingInWmPaint , true ) ; // 忽略系统消息,防止图像闪烁