• 双缓存解决闪烁问题


    原文链接:

    https://www.cnblogs.com/owenlang/p/3916989.html

       static HDC      hdcBackBuffer;
        static HBITMAP  hBitmap;
        static HBITMAP  hOldBitmap;
    //创建后备缓冲器
    //1. 用 CreateCompatibleDC 创建一个内存设备,得到后备缓冲区的hdc;
                hdcBackBuffer = CreateCompatibleDC(NULL);
    //2. GetDC 取得前端客户区的hdc,然后用 CreateCompatibleBitmap 创建相容的位图,得到一个位图句柄;
                HDC hdc = GetDC(hwnd);
                hBitmap = CreateCompatibleBitmap(hdc, cxClient, cyClient);
    //3. 把上一步得到的位图句柄选入后备缓冲区的hdc,别忘了用 ReleaseDC 释放客户区的hdc;
                hOldBitmap = (HBITMAP)SelectObject(hdcBackBuffer, hBitmap);
                ReleaseDC(hwnd, hdc);


    //使用后备缓冲器(通常在onpaint中)
    //1. 清除后备缓冲,通常用背景色填充;
    //            int backColor;
    //            GetClassLong(hwnd, backColor);
                BitBlt(hdcBackBuffer, 0, 0, cxClient, cyClient, NULL, NULL, NULL, WHITENESS);
    //2. 在后备缓冲区的hdc中绘制,写字等;
                //选用新的画笔和画刷
                oldPen = (HPEN)SelectObject(hdcBackBuffer, bluePen);
                oldBrush = (HBRUSH)SelectObject(hdcBackBuffer, redBrush);
    ……………………………………………………………………………………
    //3. 用 BitBlt 将后备缓冲区中的内容复制到前台缓冲区;
                BitBlt(ps.hdc, 0, 0, cxClient, cyClient, hdcBackBuffer, 0, 0, SRCCOPY);
    
                EndPaint(hwnd, &ps);
                //必要的延时
                Sleep(10);




    //5. 为了确保后备缓冲区能随用户改变窗口尺寸大小而改变,必须在 WM_SIZE 消息中删除已有的兼容位图,并创建一个新的合适大小的位图;
                //把 old bitmap选回到DC
                SelectObject(hdcBackBuffer, hOldBitmap);
                //删除原先创建的bitmap,否则会资源泄露
                DeleteObject(hBitmap);
                HDC hdc = GetDC(hwnd);
                //创建和客户区有相同大小的另一个bitmap
                hBitmap = CreateCompatibleBitmap(hdc, cxClient, cyClient);
                ReleaseDC(hwnd, hdc);
                //把新的 bitmap 选入DC
                SelectObject(hdcBackBuffer, hBitmap);

    //4. 最后在程序结束时释放资源。
                SelectObject(hdcBackBuffer, hOldBitmap);
                DeleteObject(hdcBackBuffer);
                DeleteObject(hBitmap);





  • 相关阅读:
    vue 父子组件通信props/emit
    mvvm
    Ajax
    闭包
    【CSS3】---only-child选择器+only-of-type选择器
    【CSS3】---last-of-type选择器+nth-last-of-type(n)选择器
    【CSS3】---first-of-type选择器+nth-of-type(n)选择器
    【CSS3】---结构性伪类选择器—nth-child(n)+nth-last-child(n)
    【CSS3】---结构性伪类选择器-first-child+last-child
    vue路由切换和用location切换url的区别
  • 原文地址:https://www.cnblogs.com/ice-arrow/p/14892495.html
Copyright © 2020-2023  润新知