双缓存
来源:互联网 发布:最值得看的电影 知乎 编辑:程序博客网 时间:2024/04/30 19:50
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,nHeight,&MemDC,0,0,SRCCOPY);
//绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();
补充说明PS:
『
你完全没有理解什么是双缓存。。。。
这里所说的双缓存实际上就是双页面(双DC),也就是说我们需要两个DC。
第一个DC,你已经提供了,那就是传入Draw函数的pDC,这个DC就是主页面,任何在该页面上的操作都会直接展现给用户。
但我们还需要另一个DC,这个DC就是离屏页面,对该页面的操作不会直接展出给用户,所有绘图操作都必须在该页面上进行。
不要说你已经提供了一个,你所写的memDC只是个局部DC,作用微乎其微,甚至可能还会使效率下降。
离屏DC应该是与你的CImage的对象的生命周期相同,通常的实现就是为你的CImage添加两个成员:
CDC m_offscreenDC; CBitmap m_offscreenBitmap;,
在你的CImage构造时就初始化好m_offscreenBitmap和m_offscreenDC,剩下的就是,
所有的绘图操作都输出只输出到m_offscreenDC上,你的Draw函数只需要一个函数,
那就是BitBlt,只需要简单的把m_offscreenDC上的内容blt到pDC上。。。
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,nHeight,&MemDC,0,0,SRCCOPY);
//绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();
补充说明PS:
『
你完全没有理解什么是双缓存。。。。
这里所说的双缓存实际上就是双页面(双DC),也就是说我们需要两个DC。
第一个DC,你已经提供了,那就是传入Draw函数的pDC,这个DC就是主页面,任何在该页面上的操作都会直接展现给用户。
但我们还需要另一个DC,这个DC就是离屏页面,对该页面的操作不会直接展出给用户,所有绘图操作都必须在该页面上进行。
不要说你已经提供了一个,你所写的memDC只是个局部DC,作用微乎其微,甚至可能还会使效率下降。
离屏DC应该是与你的CImage的对象的生命周期相同,通常的实现就是为你的CImage添加两个成员:
CDC m_offscreenDC; CBitmap m_offscreenBitmap;,
在你的CImage构造时就初始化好m_offscreenBitmap和m_offscreenDC,剩下的就是,
所有的绘图操作都输出只输出到m_offscreenDC上,你的Draw函数只需要一个函数,
那就是BitBlt,只需要简单的把m_offscreenDC上的内容blt到pDC上。。。
』
0 0
- 双缓存
- 双缓存
- 双缓存
- 双缓存
- 双缓存
- 双缓存
- Bitmaps与优化|磁盘缓存|内存缓存|双缓存
- 安卓图片缓存技术,双缓存
- 双缓存绘图GDI
- win32 双缓存
- 双缓存画背景
- 双存储缓存策略
- MFC 双缓存技术
- 分享:双缓存
- MFC双缓存画图
- 双缓存机制原理
- MFC双缓存画图
- GDI 双缓存
- fuse内核源代码
- EasyUI combobox 加载JSON数据
- Centos下vim、ctags的配置及基本用法
- iOS企业开发者帐号使用
- 全选反选复选框子类同步效果
- 双缓存
- 斐波那契数列-Fibonacci Sequence
- Docker 入门教程(三)
- Centos Yum安装Chrome浏览器
- worldwind java导入栅格影像时的无效区域透明问题
- EasyUI combobox 多选及回显赋值
- 游戏表格数据序列化自动生成工具
- 剑指offer面试题9-青蛙跳台阶及其变种问题
- 从银行窗口业务办理来看锁的实现