在Form上直接画图。
在OnPaint里做如下工作:DrawImage画背景图,再用DrawRectangle等画矢量图。现在需要如下效果:
在画一个矩形过程中,移动鼠标时,动态显示当前矩形范围。即在MouseMove中响应。如果只是画图,因为移动事件不断发生,会画出很多个矩形。
于是在MouseMove代码中首先this,Invalidate(),再DrawRectangle,则清除了上次DrawRectangle画的矩形。可是这样的话,在鼠标移动过程中会有闪烁现象。另外,当鼠标移动停止时,新画的矩形就马上消失了。Form的doublebuffer设为true也还这样。有没有简单的解决办法?
在OnPaint里做如下工作:DrawImage画背景图,再用DrawRectangle等画矢量图。现在需要如下效果:
在画一个矩形过程中,移动鼠标时,动态显示当前矩形范围。即在MouseMove中响应。如果只是画图,因为移动事件不断发生,会画出很多个矩形。
于是在MouseMove代码中首先this,Invalidate(),再DrawRectangle,则清除了上次DrawRectangle画的矩形。可是这样的话,在鼠标移动过程中会有闪烁现象。另外,当鼠标移动停止时,新画的矩形就马上消失了。Form的doublebuffer设为true也还这样。有没有简单的解决办法?
在C# 里好像里要 把 Form的 DoubleBuffered = true就可以了
在这之前先是userPaint和allpaintingInWmpaint为true。
具体的看msdn,上面有,查control.setstyle
把所有的绘图放在一个picturebox里面绘制,
不要直接再在form里面绘
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.Selectable, true);