解决MFC屏幕闪动问题:双缓冲的实现
来源:互联网 发布:java工资扣培训费 编辑:程序博客网 时间:2024/04/30 15:40
很多学员都会遇到这样的情况,在客户区绘图比较多时,或颜色与背景色相差较大时,客户区都会出现闪动,这是由于当屏幕刷新时,会先用默认的画刷清除背景,然后再在客户区画上图形,当颜色相差较大时,人眼会形成暂留,便会感觉闪动:
解决方法:采用双缓冲实现,其原理形象的理解是采用两块画布,前面一块给用户看,后面一块用来画,当后面一块画好了后,便放到前面去,由于这是区域的复制,速度相当快,人眼是感觉不出来的,就形成了良好的效果;
例子:
void CXXXXView::OnDraw(CDC* /*pDC*/)
{
………………
CClientDC pDC(this); //得到当前窗口的设备上下文,即前面那块画布
CRect RectCompatible; //设置兼容区域,一般为当前窗口大小
CDC DCCompatible; //建立兼容DC,即后面那块画布
CBitmap BitmapCompatible;//建立兼容位图,要想在兼容DC上画图,必须给它一副图
GetClientRect(&RectCompatible);//得到当前窗口的大小
DCCompatible.CreateCompatibleDC(&pDC);//创建pDC的兼容DC
BitmapCompatible.CreateCompatibleBitmap(&pDC,RectCompatible.Width(),RectCompatible.Height());//创建兼容位图
DCCompatible.SelectObject(&BitmapCompatible);//把位图选到兼容DC中,这样才可以开始画
DCCompatible.FillSolidRect(RectCompatible.left,RectCompatible.top,RectCompatible.Width(),RectCompatible.Height(),RGB(255,255,255));//用白色先刷新整个兼容DC,这相当于原来的刷新背景
DCCompatible.Rectangle(.......);//画矩形
..............................................
..................................................//其他的画图操作
pDC.BitBlt(RectCompatible.left,RectCompatible.top,RectCompatible.Width(),RectCompatible.Height(),&DCCompatible,RectCompatible.left,RectCompatible.top,SRCCOPY);//最后把兼容DC拷贝到pDC
//实现前后交替,便不会闪动
DCCompatible.DeleteDC();
BitmapCompatible.DeleteObject();
}
然后再重载CImportView::OnEraseBkgnd(CDC* pDC) ,将return CView::OnEraseBkgnd(pDC);改为return TRUE;即不刷新背景就完成了
- 解决MFC屏幕闪动问题:双缓冲的实现(转)
- 解决MFC屏幕闪动问题:双缓冲的实现
- 双缓冲方法解决屏幕刷新闪烁的问题
- MFC双缓冲解决闪烁问题
- MFC双缓冲解决闪烁问题
- 关于绘图时屏幕闪动的问题
- MFC 双缓冲 绘图时屏幕闪烁问题
- MFC利用双缓冲实现屏幕无闪烁刷新
- MFC利用双缓冲实现屏幕无闪烁刷新
- mfc双缓冲问题
- MFC 双缓冲实现
- 利用双缓冲解决屏幕图像闪烁问题
- 双缓冲加重载onpaint,OnEraseBkgnd解决屏幕闪烁问题
- 双缓冲加重载onpaint,OnEraseBkgnd解决屏幕闪烁问题
- 利用双缓冲解决游戏开发中的屏幕闪烁问题
- 用双缓冲技术解决刷新屏幕时的闪屏问题
- MFC双缓冲实现闪烁的处理
- MFC双缓冲实现闪烁的处理
- ATL
- C语言文件操作函数大全
- 私有云简介
- 有符号类型的最小负数的补码的由来
- st2中定义左右平板布局
- 解决MFC屏幕闪动问题:双缓冲的实现
- 如何理解:先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1的方法,即对于机器数为负数,则有[X]原=[[X]补]补。
- UIActionSheet cancel按钮不响应的问题
- page64
- shell 程序设计2--- 那些年我们一起学习linux程序设计
- 串行化的应用
- ReentrantLock与synchronized比较
- JSP EL标签不能和struts tag 一起使用,只能和JSTL一起使用了。
- MFC程序(SDI)一开始运行最大化详解