采用后台绘图方法绘制完成后要释放内存

       采用后台绘图方法绘图,在绘制完成后一定要释放后台内存,否则在将后台那些变量作为全局变量,在多个函数中使用时会报错。

       如在PCR项目中,4个PCR传输图像数据,每次只接收1个PCR1行的数据,接收后就将数据在后台做绘制处理,4个PCR数据全部接收完毕后(后台位图拼接画完),将整个后台位图一起显示出来。

       这时后台变量必须设为全局变量:启动开始绘制按钮后,将后台和前台DC关联起来(这部分不能放到绘图响应函数中,因为这样最后只能显示最后一行的数据,前面绘制的内容都被覆盖掉),后台BMP的每行绘制在数据接收处理响应函数中进行,所有绘制完成后,前台显示(BitBlt)在OnPaint中完成。

       在上述情况下,如果在前台显示完毕后,不释放后台内存,那下次绘制时就会报错(关联冲突等错误)。

       下面是个简单的后台绘图,全局变量,释放内存的示例:

       将后台、前台变量定义为全局变量:

       CBitmap memBmp;  
       CBitmap *oldBmp;
       CDC bDC;     
       CDC * dpDC;    
       CRect cRect;

      

       在Button1中完成前台后台关联:

       dpDC = GetDlgItem(IDC_PCR2BMP) -> GetDC();
       bDC.CreateCompatibleDC(dpDC);

       memBmp.CreateCompatibleBitmap(dpDC,240,240);
       oldBmp = bDC.SelectObject(&memBmp);
       bDC.SetBkColor(RGB(0,0,0));

 

       在Button2中完成绘图并释放后台内存:

       CBrush brush1,brush2;
       brush1.CreateSolidBrush(RGB(255,0,0));
       brush2.CreateSolidBrush(RGB(0,255,0));

       cRect.SetRect(0,0,120,120);
       bDC.Rectangle(cRect);
       bDC.FillRect(&cRect,&brush1);

       cRect.SetRect(120,120,240,240);
       bDC.Rectangle(cRect);
       bDC.FillRect(&cRect,&brush2);

      dpDC->BitBlt(0,0,240,240,&bDC,0,0,SRCCOPY);

      memBmp.DeleteObject();
      bDC.SelectObject(oldBmp);
      bDC.DeleteDC();

 

      另外CBrush的使用也要注意,参考http://blog.csdn.net/phenixyf/article/details/45046051

 

 

 

 

      

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值