Win32(Windows Api)双缓冲

 

一.定义

这个就不说了,百度百科:https://baike.baidu.com/item/%E5%8F%8C%E7%BC%93%E5%86%B2

二.实现方法

方法一:

        CDC MemDC; //首先定义一个显示设备对象

        CBitmap MemBitmap;//定义一个位图对象

        //随后建立与屏幕显示兼容的内存显示设备

        MemDC.CreateCompatibleDC(NULL);

        //这时还不能绘图,因为没有地方画 ^_^

        //建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小,也可以自己定义

        //(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上)

        MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);//将位图选入到内存显示设备中

        //只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上

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

        //先用背景色将位图清除干净,这里我用的是白色作为背景

        //你也可以用自己应该用的颜色

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

        //绘图

        //MemDC.MoveTo(……);

        //MemDC.LineTo(……);

        //将内存中的图拷贝到屏幕上进行显示

        pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);

        //绘图完成后的清理

        //把前面的pOldBit选回来.在删除MemBitmap之前要先从设备中移除它

        MemDC.SelectObject(pOldBit);

        MemBitmap.DeleteObject();

        MemDC.DeleteDC();

        //版权:百度

 方法二:

        //网上的办法不好用,自己琢磨出来的

        HDC MemDC = GetDC(hWnd);

        RECT rc;
        rc.left = 0;
        rc.top = 0;
        rc.bottom = CY;
        rc.right = CX;

        FillRect(hMemDC, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH));//用白色画笔填充

        //Draw

        //MoveToEx(...);

        //LineTo(...);
        SwapBuffers(MemDC);//双缓冲(这是盖茨送的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值