在SDI应用程序中,当我们需要时刻动态刷新界面的时候,如果我们一直使用,UpdateAllView()那么就会出现屏幕不停闪烁。闪屏非常严重,特别是一直在动态刷新的时候。并且在闪屏的过程中 我们根本就不能进行任何操作。那么此时我们就需要改变我们刷新的方式,只刷新我们需要刷新的那部分界面。

我们使用双缓存绘图方式就可以很好的解决这个问题。

在OnDraw()函数中:
//------------------双缓存绘图-----------------//
CPoint ptCenter;
CRect rect, ellipseRect;
GetClientRect(&rect);
ptCenter = rect.CenterPoint();
CDC dcMem;//定义一个现实设备对象
CBitmap bmp;//定义一个位图对象
//随后建立与屏幕现实兼容的内存现实设备
dcMem.CreateCompatibleDC(pDC);
//这是还不能绘图,因为没有地方画
//下面建立一个与屏幕现实兼容的位图,至于位图的大小可以使用窗口大小
//即创建兼容位图
bmp.CreateCompatibleBitmap(&dcMem, rect.Width(), rect.Height());
//将位图选入内存DC
dcMem.SelectObject(&bmp);
//按照原有背景色填充客户区
dcMem.FillSolidRect(rect, pDC->GetBkColor());
//绘图操作
for( int i = 60; i > 0; --i)
{
ellipseRect.SetRect(ptCenter, ptCenter);
ellipseRect.InflateRect(i*5,i*5);
dcMem.Ellipse(ellipseRect); //在内存上绘图 } //将内存DC上的东西复制到pDC
pDC->BitBlt(0,0, rect.Width(), rect.Height(), &dcMem, 0, 0, SRCCOPY);
dcMem.DeleteDC();//删除DC
bmp.DeleteObject();//删除位图

注意:在OnDraw()函数中,应该先进行双绘图的设置,然后才运行你需要更新的内容。

然后在需要刷新的位置加入:

 POSITION pos = pDoc->GetFirstViewPosition();
CPointCloudMeasureView *pView = NULL;
if(pos)
pView = (CPointCloudMeasureView *)pDoc->GetNextView(pos);
else
ASSERT(false);
//pView->Invalidate();
HWND hWnd = AfxGetMainWnd()->m_hWnd;
pView->InvalidateRect((LPCRECT)hWnd);

MFC 双缓存绘图的更多相关文章

  1. MFC双缓冲绘图(2015.09.24)

    问题引入: 最近在尝试编写贪吃蛇游戏时遇到这么一个问题:当系统以较快频率向窗口发送WM_PAINT消息时,调用OnPaint()函数在窗口中绘制图形就会发生闪烁现象. 问题分析: 当我们把绘图过程放在 ...

  2. MFC双缓冲绘图实例

    本人之前一直了解双缓冲绘图的基本原理,但是在研究很久之后才大概知道具体的使用过程,本文将详细介绍本人在实际项目中使用双缓冲绘图的案例. 实现功能:主界面显示某张包含人脸的图片,通过dlib detec ...

  3. mfc双缓冲绘图

    1.要求 在界面加载本地图片并显示,每过100ms改变一张图片显示 2.现象 通过定时器控制CImage,Load,Draw,Destroy,会非常的卡顿.因为Load图片时,会是非常大的数据[所有C ...

  4. mfc 双缓存

    CRect rect; //获取显示区域大小(该值为据对坐标,使用时需转换) GetWindowRect(rect); rect.SetRect(0, 0, rect.Width(), rect.He ...

  5. MFC双缓存技术代码

    屏蔽背景刷新,在View中添加对WM_ERASEBKGND的响应,直接返回TRUE: BOOL CTEMV1View::OnEraseBkgnd(CDC* pDC) { // TODO: 在此添加消息 ...

  6. MFC双缓冲解决图象闪烁[转]

    转载网上找到的一篇双缓冲的文章,很好用.http://www.cnblogs.com/piggger/archive/2009/05/02/1447917.html__________________ ...

  7. 【MFC】VC界面绘制双缓存

    VC界面绘制双缓存 转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/11/20/2255811.html 1.闪屏的问题在GDI的绘图 ...

  8. 【MFC】MFC绘制动态曲线,用双缓冲绘图技术防闪烁

    摘自:http://zhy1987819.blog.163.com/blog/static/841427882011614103454335/ MFC绘制动态曲线,用双缓冲绘图技术防闪烁   2011 ...

  9. 陈灯WGF双缓冲绘图框架

    “木丸子童屋”,专售各类儿童玩具,价格优惠,请大家多多支持:http://shop65552598.taobao.com/ WGF(windows graphic foundation)为window ...

随机推荐

  1. SQL 分组后获取每组中最大值

    场景:sql server 2008 drop table ID CREATE TABLE ID ( id ,) not null, code int , D date, PRIMARY KEY (i ...

  2. 20.multi_协程方法抓取总阅读量

    # 用asyncio和aiohttp抓取博客的总阅读量 (提示:先用接又找到每篇文章的链接) # https://www.jianshu.com/u/130f76596b02 import re im ...

  3. <随便写>同步,异步进程池,线程

    from multiprocessing import Pool import time import os def work(n): print("%s run" % os.ge ...

  4. python基础语法(运算符及优先级)

    python基础语法(运算符及优先级) python语言支持的运算符类型 算数运算符 假设变量a为10,变量b为21 算数符 描述 实例 + 加-两个对象相加 a+b结果31 - 减-得到一个负数或者 ...

  5. 常用Linux Tips(不定期更新)

    查看本机所有开放端口 lsof -i -P | grep -i listen 查看一段文本单词出现频率 awk '{b[length($0)]++;total_lines++;for(i=1;i< ...

  6. win 10安装Nginx,php,mysql 小计

    一直没有尝试Nginx作为Web服务器,时常用的是apache,在Ubuntu下,输入一些安装命令就可以把LAMP环境比较轻松的搭建起来. 系统: windows 10 NT ,Nginx-1.14. ...

  7. 小程序怎样控制rich-text中的<img>标签自适应

    小程序通过rich-text实现字符串转化为html,即 <rich-text node="{{html}}"></rich-text>.如果html字符串 ...

  8. Google 打算用 QUIC 协议替代 TCP/UDP

    有句话叫做一流企业定标准.二流企业做品牌.三流企业卖技术.四流企业做产品.Google 似乎在冲着一流企业的目标迈进.去年,Google 已经从以 SPDY 为基础的 HTTP 协议 16年 来的首个 ...

  9. HashMap四种遍历方式

    public static void main(String[] args){ Map<String,String> map = new HashMap<String, String ...

  10. 使用vue-awesome-swiper滑块插件

    基于之前写的vue2.0 + vue-cli + webpack 搭建项目( vue-awesome-swiper版本:3.1.3 ,swiper4,如果成功后没报错,但不显示分页样式,可能版本对不上 ...