读书人

为何用invalidate函数屏幕会不断地闪烁

发布时间: 2012-11-17 11:14:15 作者: rapoo

为什么用invalidate函数屏幕会不断地闪烁
即使我使用了invalidate(rectangle);也还是会闪。
是不是invalidate();只要一旦被调用就会不断的以一个频率不断地起作用啊?
那要怎么样避免闪烁啊?

[解决办法]
控件响应WM_ERASEBKGND消息直接返回TRUE
控件使用双缓冲
SetStyle(ControlStyles.UserPaint, True)
SetStyle(ControlStyles.DoubleBuffer, True)
[解决办法]
窗体构造函数中加一句:
this.DoubleBuffered = true;
试试把。
[解决办法]
Invalidate、Update、Refresh的作用和区别
避免多控件窗体闪烁
[解决办法]
invalidate
就是设置无效区域。
区域无效则会导致收到2条消息:
WM_ERASEBKGND//擦除背景,同时需要重绘背景
WM_PAINT//用户内容绘制
以上两个消息都是只针对一个区域的,没有指定的时候,默认是窗体的WorkArea。

窗体闪烁,原因就是对屏幕绘制次数过多,解决方法就是双缓冲绘图,原理就是定义一个和窗体一样大小的图片,吧所有对窗体的绘制改绘制到图片上,一次性贴图到窗体减少对窗体实际操作达到避免闪烁。
双缓冲在pc下有2个途径:
1.系统的方法,见1,2楼
2.自己实现,方法见刚描述的。详细代码网上很多。我回帖也回了很多。你搜索一下是能找到具体写法答案的。

读书人网 >C#

热点推荐