双缓冲技术的简单使用

所谓需要的时候才想到去寻找。

我的程序里面需要用了一个动换场面,但是GDI简单的动画实现,不可避免的让我的显示器闪动不已,我知道,要么放弃GDI而用DirectX,要么就用双缓冲技术,于是,我去google了,找到了很多篇文章,其实只有一篇,呵呵

在此记录下来:

OnDraw或者OnPaint函数中加入如下代码:

      

CClientDC dc(this);

    CRect rect;

    GetWindowRect(&rect);

    int nWidth = rect.Width();

    int nHeight= rect.Height();

   

    CDC MemDC;

    CBitmap MemBitmap;

    MemDC.CreateCompatibleDC(NULL);

    MemBitmap.CreateCompatibleBitmap(&dc, nWidth, nHeight);

    CBitmap *pOldBit = MemDC.SelectObject(&MemBitmap);

    MemDC.FillSolidRect(0, 0, nWidth, nHeight, RGB(255, 255, 255));

    //在MemDC上绘出所有画面

    //

    dc.BitBlt(0, 0, nWidth, nHeight, &MemDC, 0, 0, SRCCOPY);

    MemBitmap.DeleteObject();

    MemDC.DeleteDC();

    //-----------------end------------------

写下了这些代码后,我发现我的显示器还是不争气的闪烁,肯定有什么地方不对了。寻找这个失误花了我很多时间,呵呵,我们还需要重写WM_ERASEBKGND的消息处理函数,并返回真,也就是说只是把OnEraseBkgnd的代码增加一条return true;

^_^这样就可以了哈!!

                                                                                    Thursday, September 22, 2005

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值