【学习总结】MFC(CImagelist)(重绘)(双缓冲)

CImagelist实现按键列表
摘要由CSDN通过智能技术生成

双缓冲实现按钮列表

本文通过介绍双缓冲与CImageList,重写CButton类,来实现按钮列表。

在这里插入图片描述

简单的效果图
双缓冲实现

双缓冲的技术原理:
在Windows中每一种设备都在内存中有一个设备描述表与其对应,这个设备描述表实际上就是一个内存缓冲区。
传统的绘图是单缓冲,将图形绘制在设备描述表缓冲区中,然后由gdi自动的将设备描述表中的图像拷贝到显存中。采用双缓冲绘图是在内存中有两片缓存,除了设备描述表以外还有一个需要手动建立的与设备描述表缓冲区(前端缓冲区)相兼容的后备缓冲区;绘图过程中,首先将图形绘制在后备缓冲区中,然后再手动将后备缓冲区中的图像拷贝到前端缓冲区中,再由gdi自动将前端缓冲区中的图像拷贝到显存完成图像的显示过程。双缓冲绘图的目的是为了解决屏幕闪烁问题。

实现步骤:

  1. 创建与窗口设备描述表( 前端缓冲区)兼容的内存设备描述表(后备缓冲区)
  2. 创建与内存设备描述表相兼容的位图,并将位图选入内存设备描述表(没有位图的设备描述表是不能绘图的)
  3. 将图形绘制再内存设备描述表中
  4. 将内存设备描述表中的内容拷贝到窗口设备描述表
  5. 释放设备描述表句柄、位图等资源
CDC MemDC;//定义一个内存设备描述表对象(即后备缓冲区)
CBitmap MemBitmap;//定义一个位图对象

MemDC.CreateCompatibleDC(NULL);//建立与窗口设备描述表(前端缓冲区)兼容的内存设备描述表句柄(后备缓冲区)
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,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值