主题最新回顾(发布时间: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); |