码迷,mamicode.com
首页 > 编程语言 > 详细

MFC利用双缓冲刷新绘图

时间:2015-08-04 23:25:54      阅读:392      评论:0      收藏:0      [点我收藏+]

标签:

       在VC中进行绘图过程处理时,如果图形刷新很快, 经常出现图形闪烁的现象。利用先在内存绘制,然后 拷贝到屏幕的办法可以消除屏幕闪烁,具体的方法是先在内存 中创建一个与设备兼容的内存设备上下文,也就是开辟一快内 存区来作为显示区域,然后在这个内存区进行绘制图形。在绘制完成后利用 BitBlt函数把内存的图形直接拷贝到屏幕上即可。

        具体想实现的是: 在Dialog客户区的一个图片控件(IDC_MAP)中绘制几个动态的点,如果不用双缓冲的技术,在屏幕刷新的时候会有闪烁的现象。

	CRect rect;
	CWnd* pWnd = GetDlgItem(IDC_MAP); 
	pWnd->GetWindowRect(&rect);    // 获取控件屏幕坐标
	pWnd->ScreenToClient(&rect);   //转换为对应的控件坐标
	CDC* pDC = pWnd->GetDC();

	CDC* pMem =new CDC;            //定义内存绘图的设备上下文
	CBitmap* pBmp =  new CBitmap;
	CBitmap* pOldBmp;
	//CDC* dc=GetDC();
	pMem->CreateCompatibleDC(pDC);
	pBmp->CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
	pOldBmp = pMem->SelectObject(pBmp);

         //在pMem中绘图

	...........

	//将内存中绘制的位置复制显示到控件中
	pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),pMem,0,0,SRCCOPY);

	pMem->SelectObject(pOldBmp);
	pBmp->DeleteObject();
	pMem->DeleteDC();

实现的效果如下:

   在Ontimer中实现目标点的移动,点击按钮匹配点完成连线, 再次启动定时器,重新绘制位置信息,实现动态实时显示信息。

技术分享

技术分享

技术分享




MFC利用双缓冲刷新绘图

标签:

原文地址:http://my.oschina.net/u/818523/blog/487784

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!