MFC利用双缓冲刷新绘图

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

220120_Hxqt_818523.jpg

220120_yvWD_818523.jpg

220121_Ttf1_818523.jpg




转载于:https://my.oschina.net/u/818523/blog/487784

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值