回复帖子:(yy)你检查下你DeleteObject返回是不是0,如果...

用户名:   *您没有注册?
密码:   *忘记论坛密码?    标题采用“回复:XXX....”
验证码 点击获取验证码
主题标题:  *不得超过 200 个汉字
当前心情
上一页 发帖表情 下一页
内容
  

主题最新回顾(发布时间:2018-1-16 16:57:00)
--  作者:客人(116.231.*.*)
--  

谢谢,谢谢,不胜感激,确实如您所说的那样,我修改程序后就好了


主题最新回顾(发布时间:2018-1-16 14:25:00)
--  作者:yy
--  

你检查下你DeleteObject返回是不是0,如果是0则表示对象删除失败。

你查下MSDN,当CBitmap的对象被DC加载的时候应该是删除不了对象的。

所以当DC做SelectObject的时候,你应该保留返回的old对象,并且在使用完成后,重新调用SelectObject恢复原对象。

例如:

CBitmap* pOldBmp = memDC.SelectObject( &bmp );    //把位图选入内存DC,并保存原对象。

....        //若干操作

memDC.SelectObject( pOldBmp);         //还原

bmp.DeleteObject();


主题最新回顾(发布时间:2018-1-16 10:13:00)
--  作者:客人(117.131.*.*)
--  [原创]请教下大家,我这个MFC双缓冲代码哪里存在内存泄漏?

  CRect rc;

  CDC memDC;   

  CBitmap bmp; //内存中承载临时图象的位图

  CDC* pDC = GetDC();

  

  memDC.CreateCompatibleDC(pDC);           //创建与目标DC相兼容的内存DC

  if((Uartled_flag==0)&&(Uartled_flag2==0x5555))

  {

  bmp.LoadBitmap(IDB_BITMAP_Green_Led);

  memDC.SelectObject(&bmp);//把位图选入内存DC

  pDC->BitBlt(710,546,32,32,&memDC, 0, 0,SRCCOPY);// BitBlt绘图函数

  bmp.DeleteObject();

  }

  else if((Uartled_flag==1)&&(Uartled_flag2==0x5555))

  {

  bmp.LoadBitmap(IDB_BITMAP_BLACK); //

  memDC.SelectObject(&bmp);//把位图选入内存DC

  pDC->BitBlt(710,546,32,32,&memDC, 0, 0,SRCCOPY);// BitBlt绘图函数

  bmp.DeleteObject();

  }

  else

  {

   bmp.LoadBitmap(IDB_BITMAP_RED_LED);

   memDC.SelectObject(&bmp);//把位图选入内存DC

   pDC->BitBlt(710,546,32,32,&memDC, 0, 0,SRCCOPY);// BitBlt绘图函数

   bmp.DeleteObject();

  }

  //com2画一个红色的圆

  bmp.LoadBitmap(IDB_BITMAP_RED_LED);

  memDC.SelectObject(&bmp);//把位图选入内存DC

  pDC->BitBlt(710,570,32,32,&memDC, 0, 0,SRCCOPY);// BitBlt绘图函数

  bmp.DeleteObject();


  memDC.DeleteDC();

  ReleaseDC(pDC);