双缓冲是一种思想,也是一种方法,它可以避免频繁的闪烁问题。如果在画布上直接绘画,由于每次都会重新擦除然后重绘,绘制需要时间,所以肉眼会看到闪烁问题。解决的方法就是在内存中先创建出一个内存dc,然后在内存dc中绘制,绘制结束后,直接“贴”上去就好了。

具体步骤如下:

    1、声明

     HDC hMemDC;
       HBITMAP hBitmap;

2、创建相容的内存DC

hMemDC = CreateCompatibleDC(hdc);

3、创建位图

hBitmap = CreateCompatibleBitmap(hdc, rt.right - rt.left, rt.bottom - rt.top);//rt为RECT变量

4、将位图选入到内存DC中,没有这一步的话,内存DC只能是单色的,置换后才是多彩的

   SelectObject(hMemDC, hBitmap);

5、绘制

      .....

6、拷贝到原先内存

BitBlt(hdc, 0, 0, rt.right - rt.left, rt.bottom - rt.top, hMemDC, 0, 0, SRCCOPY)

7、释放内存

DeleteDC(hMemDC);

DeleteObject(hBitmap);

   EndPaint(hwnd,&ps);

    //解释一下DeleteDC与ReleaseDC的区别,如果是create出来的,请用DeleteDC,如果是get出来的,请用ReleaseDC。

总结代码如下:

PAINTSTRUCT     ps;
RECT rtClient;
GetClientRect(hwnd,&rtClient);
HDC hdc = BeginPaint(hwnd, &ps);
HDC hMemDC = CreateCompatibleDC(hdc);
HBITMAP hBitmap = CreateCompatibleBitmap(hdc, rtClient.right - rtClient.left, rtClient.bottom - rtClient.top);//rt为RECT变量;
SelectObject(hMemDC, hBitmap);
   FillRect(hMemDC, &rtClient,WHITE_BRUSH); BitBlt(hdc, , ,rtClient.right - rtClient.left, rtClient.bottom - rtClient.top,
hMemDC, , , SRCCOPY);
DeleteDC(hMemDC);
DeleteObject(hBitmap);
EndPaint(hwnd,&ps);

最新文章

  1. 理解OAuth 2.0
  2. Get请求中文乱码的几种解决方式
  3. centos从日志文件查找关键字的日志并生成文件
  4. iOS网络相关零散知识总结
  5. IT公司100题-16-层遍历二元树
  6. HTML5+CSS3-机器猫
  7. 关于Java获取系统信息
  8. C# Distinct方法的使用笔记
  9. CDZSC_2015寒假新人(2)——数学 G
  10. spring 配置和实例
  11. PHP+Mysql+jQuery实现中国地图区域数据统计(raphael.js)
  12. 《算法4》2.1 - 插入排序算法(Insertion Sort), Python实现
  13. Assignments
  14. linux shell 备注(一)
  15. nginx+apache动静分离/负载均衡
  16. audio google play()
  17. 微信小程序--录音
  18. (链表) leetcode 328. Odd Even Linked List
  19. Codeforces Round #369 (Div. 2) B. Chris and Magic Square 水题
  20. 解决studio的URI is not registered (Setting|Language&Frameworks|Schemas and DTDs)

热门文章

  1. [luoguP1029] 最大公约数和最小公倍数问题(数论)
  2. [luoguP1507] NASA的食物计划(DP)
  3. - > 贪心基础入门讲解三——活动安排问题二
  4. bzoj1072【SCOI2007】排列perm
  5. Cocos2d-X中的菜单
  6. 1.4 - OSPF的运行模式⑦
  7. 有用 .htaccess 使用方法大全
  8. C++简单版BitSet求解大量数据是否存在莫个数
  9. swift 2.0 语法 循环
  10. UVA - 10691 Subway