MFC双缓冲绘图
2016-03-03 00:43
239 查看
前言
双缓冲绘图是为了避免GDI绘图时,产生的UI闪烁.双缓冲绘图是先在兼容DC上画好,再贴图到物理DC, 看起来就不闪了.
就像翻书,如果要翻倒100页,快速翻时,看的眼睛都花了.
如果先将第一页的照片放到用户眼前,等翻倒100页之后,再照一张第100页的照片放到用户眼前.
用户就会无闪烁的看到想要的第100页内容.
demo
void CCadByMfcView::OnDraw(CDC* pDC) { CRect rt; CCadByMfcDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); /// 双缓冲绘图(可以避免闪烁和WM_MOUSEMOVE绘图需求引起的残影) /// 建立兼容DC CDC memdc; memdc.CreateCompatibleDC(pDC); /// 建立兼容位图 CBitmap bitmap; GetClientRect(&rt); bitmap.CreateCompatibleBitmap(pDC, rt.Width(), rt.Height()); /// 将兼容位图选进兼容DC memdc.SelectObject(&bitmap); /// 设置兼容DC的背景, 默认背景是黑色的 CBrush brush(RGB(255, 255, 255)); ///< 白刷子 memdc.FillRect(&rt, &brush); /// 在兼容DC上绘图 /// 画固定数据 DrawDataList(&memdc); /// 画活动数据 if (NULL != GetShapeCur()) { GetShapeCur()->OnDraw(this, &memdc); } /// 将兼容DC拷贝进物理DC pDC->BitBlt(0, 0, rt.Width(), rt.Height(), &memdc, 0, 0, SRCCOPY); }
相关文章推荐
- 20160303 - 升级 Windows 10 版本 1511 后,文件夹默认打开方式为 cmd 的修复
- 个人进阶之路——安卓蓝牙模块(4)
- Linux下使用C语言返回年月日
- W6s数据传输格式
- iOS 第三方 需要 引用的库
- 自定义垂直滚动切换TextView
- 关于React使用中遇到的坑
- Hibernate学习篇04——联合主键(一)
- Nginx运行和控制命令
- 自我介绍
- 微信公众号 “网络出错,轻触屏幕重新加载”
- 260. Single Number III
- (java)Binary Tree Preorder Traversal
- linux redis安装
- ios 多线程开发 GCD
- VisualSVN Server仓库迁移到Linux(包含所有版本, 权限,用户信息)
- Linux系统运维/vi的额外功能/4
- Mistakes in Python
- (java)Missing Number
- 数论+差分 hdu1121 Complete the Sequence