解决自绘制控件闪烁的问题

      记得以前用VC开发自绘制控件的时候,遇到的一个很烦人的问题就是控件在paint的时候总是出现flicker(闪烁)。原因其实很简单,就是你一点一点的向设备上下文环境绘制,中间还有很多逻辑运算,结果就像是动画了,不过计算机的速度比较快,所以呈现在我们面前的闪烁,而闪烁的出现大大的影响的客户的使用体验。后来一个程序员开发了一个后来广为流传的类MemDC,这个类首先创建一个兼容的设备上下文环境,将所有的绘制工作放到这个类里完成,最后将绘制好的内容一次性的帖(bitblt)到实际的上下文环境,这样就解决的闪烁的问题,这就是双缓存机制。这个类是如此简洁好用,以至于很多的开源的控件里都用到了这个类。
      好了,言归正传,说说dotnet控件是怎么解决闪烁问题的。既然双缓存机制是如此的有效而且实现又不是很复杂,微软一定是很乐意将它作为自己的标准。最近研究dotnet控件的制作,看了看control的文档,才发现微软在dotnet控件的基类Control类里已经提供的这种机制。现在如果你想在自己的控件里实现双缓存机制,只需要简单的设置控件的风格就可以了。如果你的控件是派生于Control类的话,你只需要在你的控件造函数里加上下边几行代码:
      SetStyle(ControlStyles.DoubleBuffer, true);
      SetStyle(ControlStyles.UserPaint, true);
另外你也可以使用下面的代码:
      this.DoubleBuffered =true;

posted on 2006-11-30 17:24 纶巾客 阅读(3778) 评论(7) 编辑 收藏

评论

#1楼 2006-12-01 00:20 Cat Chen      

复杂的GDI+绘图,可以考虑直接使用BufferedGraphics类实现双缓冲。  回复 引用 查看   

#2楼 2006-12-05 22:18 shewo[未注册用户]

长见识了.以前一直没弄明白为CMemDC是干啥用的.  回复 引用   

公告

本博客上的所有文章如非特别说明均为原创,如果要转载请注明文章出处。
昵称:纶巾客
园龄:6年3个月
粉丝:48
关注:0

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

统计

  • 随笔 - 48
  • 文章 - 0
  • 评论 - 384
  • 引用 - 116

搜索

 
 

常用链接

我的标签

随笔分类(44)

随笔档案(48)

文章分类

联系我

友情链接

积分与排名

  • 积分 - 265322
  • 排名 - 280

最新评论

阅读排行榜

评论排行榜

推荐排行榜