MFC如何避免闪烁
来源:互联网 发布:中国出国留学数据 编辑:程序博客网 时间:2024/06/06 08:56
显示图形如何避免闪烁,如何提高显示效率是问得比较多的问题。而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案。
MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单,只要使用方法得当,再加上一些技巧,用MFC可以得到效率很高的绘图程序。
我想就我长期(呵呵当然也只有2年多)使用MFC绘图的经验谈谈我的一些观点。
1、显示的图形为什么会闪烁?
pDC->MoveTo(0,0);
pDC->LineTo(100,100);
这个绘图过程应该是非常简单、非常快了吧,但是拉动窗口变化时还是会看见闪烁。其实从道理上讲,画图的过程越复杂越慢闪烁应该越少,因为绘图用的时间与用背景清除屏幕所花的时间的比例越大人对闪烁的感觉会越不明显。比如:清楚屏幕时间为1s绘图时间也是为1s,这样在10s内的连续重画中就要闪烁5次;如果清楚屏幕时间为1s不变,而绘图时间为9s,这样10s内的连续重画只会闪烁一次。这个也可以试验,在OnDraw(CDC *pDC)中这样写:
for(int i=0;i<100000;i++)
{
pDC->MoveTo(0,i);
pDC->LineTo(1000,i);
}
呵呵,程序有点变态,但是能说明问题。
2、如何避免闪烁
* 可以在窗口形成时给窗口的注册类的背景刷付NULL
* 也可以在形成以后修改背景
* 要简单也可以重载OnErASEBkgnd(CDC* pDC)直接返回TRUE
3、如何实现双缓冲
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();
上面的注释应该很详尽了,废话就不多说了。
4、如何提高绘图的效率
如果你的绘图过程不复杂,这样做可能对你的绘图效率不会有提高。
转http://blog.csdn.net/aaahuanian/article/details/7844522
- MFC如何避免闪烁
- MFC如何避免闪烁
- MFC如何避免重绘闪烁
- MFC 显示图形如何避免闪烁
- MFC 显示图形如何避免闪烁
- MFC避免闪烁
- MFC避免闪烁
- 用MFC如何高效地绘图以及如何避免闪烁
- MFC界面避免闪烁问题
- 灰度图如何避免闪烁
- 显示图形如何避免闪烁
- 显示图形如何避免闪烁
- 显示图形如何避免闪烁
- 显示图形如何避免闪烁
- MFC避免绘图时闪烁(OnEraseBkgnd)
- 引用:显示图形如何避免闪烁
- 如何避免treeview控件闪烁刷新
- 转载:显示图形如何避免闪烁
- “瘾君子”没钱吸毒 网吧顺走50多部苹果三星手机
- 第05章-可视化技术(2)
- Unity3D——异步加载游戏场景loading界面的开发!
- 反射原理
- GCD的使用
- MFC如何避免闪烁
- bash: service: command not found 错误的解决方法
- 云计算时代——本质、技术、创新、战略
- 数组分割
- 数据结构-图
- c# 类与结构的概述
- Win7环境下安装ActiveMQ
- spagobi系列文章-01 环境部署及部分汉化
- 何时使用copy,何时使用strong