日期:2014-05-18  浏览次数:20974 次

急问:重绘一直闪屏
需求:
1:按下鼠标,winform上绘制字符串str1。并且窗口放大缩小,最下化再最大化都不会消失窗口上的字

2:接法,绘制方法为Draw,我全局一个记录是否需要绘制的变量flag=false。我鼠标按下的时候flag=true,然后调用refresh(),在重绘中调用if(flag)Draw方法,调用方法前我先Invalidate()掉屏幕上之前画的,发现屏幕一直在刷新。如果不调用Invalidate()的话,屏幕上的字一会就变粗体了,应该是一直在某个地方画导致的。

请问我改如何做,保证屏幕上的不刷屏,也不会造成越画字体越粗呢?


------解决方案--------------------
把你的画图代码写到OnPaint中,然后刷新时调用Invalidate,顺便把双缓冲打开

this.DoubleBuffered = true
------解决方案--------------------
有一个全局变量,记录你画的内容位置等信息,鼠标按下时更新那些信息,并调用 form.Invalidate() 在 form 的重绘事件里根据记录的信息绘制。
------解决方案--------------------
调用 form.Invalidate() 后会清理画布上的内容,并触发重绘事件,这样通过重绘事件来绘制就只有一次,并且窗口缩放也会触发重绘事件,绘制内容也不会消失。
form.Invalidate() ,绘制的代码里不要调用,只在鼠标按下时调用。
------解决方案--------------------
探讨

鼠标好像不影响,按键盘倒是影响引用:
调用 form.Invalidate() 后会清理画布上的内容,并触发重绘事件,这样通过重绘事件来绘制就只有一次,并且窗口缩放也会触发重绘事件,绘制内容也不会消失。
form.Invalidate() ,绘制的代码里不要调用,只在鼠标按下时调用。