源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

基于WTL 双缓冲(double buffer)绘图的分析详解

  • 时间:2020-05-24 08:31 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:基于WTL 双缓冲(double buffer)绘图的分析详解
WTL中有两个Mix-in类: CDoubleBufferImplCDoubleBufferWindowImpl,用于创建双缓冲绘图窗口,用法非常简单。 下面创建了一个普通的WTL窗口类,在窗口的客户区中有大量的绘图工作,使用CDoubleBufferImpl类来消除绘图时的闪烁现象:
[url=http://www.codeguru.com/cpp/w-p/vista/article.php/c15709/Using-Windows-Vista-BuiltIn-Double-Buffering.htm]Using Windows Vista Built-In Double Buffering [/url][/b]在WTL中使用Vista提供的这一功能非常容易,最新的WTL库中提供了CBufferedPaintImpl和CBufferedPaintWindowImpl两个类,这两个类的用法和前面提到的两个WTL自带的双缓冲类几乎一样。区别仅仅是所重载的DoPaint()函数的参数稍有不同。 对于CBufferedPaintImpl类,所需重载的DoPaint()函数的样子如下所示:
[u]复制代码[/u] 代码如下:
void DoPaint(CDCHandle dc, RECT& rect) {  CRect rc(rect);  dc.FillSolidRect(&rc,WHITE_COLOR);  HPEN hOldPen = dc.SelectPen(m_RectPen);  const int width = 5;  int x = 0;  int count = rc.Width()/width;  int height = 0;  for (int i=0; i<count; i++)  {   height = (int)((double)rand()*rc.Height())/RAND_MAX;   dc.Rectangle(x,rc.Height(),x+width,rc.Height()-height);   x += width;  }  dc.SelectPen(hOldPen); }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部