科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Visual C++中实现双缓冲的基本原理

Visual C++中实现双缓冲的基本原理

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文通过形象的例子说明双缓冲的基本原理并给出了主要步骤的源代码,供大家参考!

作者:xjtuse_mal 来源:天极开发 2007年9月9日

关键字: Visual C++ 双缓冲

  • 评论
  • 分享微博
  • 分享邮件

双缓冲的原理可以这样形象的理解:把电脑屏幕看作一块黑板。首先我们在内存环境中建立一个“虚拟“的黑板,然后在这块黑板上绘制复杂的图形,等图形全部绘制完毕的时候,再一次性的把内存中绘制好的图形“拷贝”到另一块黑板(屏幕)上。采取这种方法可以提高绘图速度,极大的改善绘图效果。

例如在OnDraw()函数中可以如下所述实现双缓冲,其主要步骤分为四步:

CPen Pen;

Pen.CreatePen(PS_INSIDEFRAME,1,RGB(225,225,0));

CBrush Brush;

Brush.CreateSolidBrush(RGB(225,225,0));

CDC dcMem;

CBitmap bm;

CRect rc;

GetClientRect(&rc);

// Step 1:为屏幕DC创建兼容的内存DC :CreateCompatibleDC()

dcMem.CreateCompatibleDC(pDC);

// Step 2:创建位图:CreateCompatibleBitmap()

bm.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());

// Step 3:把位图选入设备环境:SelectObject(),可以理解为选择画布

dcMem.SelectObject(&bm);

dcMem.SelectObject(Pen);

dcMem.SelectObject(Brush);

dcMem.Ellipse(0,0,50,50);//画椭圆

// Step 4:把绘制好的图形“拷贝“到屏幕上:BitBlt()

pDC->BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY);

dcMem.DeleteDC();

bm.DeleteObject();

这样便实现了双缓冲,通过这个方法可以防止在VC中画图时出现屏幕闪烁的情况。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章