随笔 - 44  文章 - 0 评论 - 321 trackbacks - 116
<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

本博客上的所有文章如非特别说明均为原创,如果要转载请注明文章出处。

与我联系

搜索

 

常用链接

留言簿

我参加的小组

我参与的团队

随笔分类(40)

随笔档案(44)

文章分类

联系我

友情链接

积分与排名

  • 积分 - 198936
  • 排名 - 236

最新评论

阅读排行榜

评论排行榜

      记得以前用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 纶巾客 阅读(2934) 评论(7)  编辑 收藏 网摘 所属分类: WinForm Control

FeedBack:
#1楼 2006-12-01 00:20 Cat Chen      
复杂的GDI+绘图,可以考虑直接使用BufferedGraphics类实现双缓冲。
  回复  引用  查看    
#2楼 2006-12-05 22:18 shewo[未注册用户]
长见识了.以前一直没弄明白为CMemDC是干啥用的.
  回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 578021




相关文章:

相关链接: