双缓冲技术的简单使用

来源:互联网 发布:七氟烷的mac值 编辑:程序博客网 时间:2024/05/16 00:41

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

我的程序里面需要用了一个动换场面,但是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