GDI资源释放问题 :如CDC销毁,位图对象销毁,CDC 绘图擦除,位图擦除,以及其他内存回收的问题应该注意什么

w327115047 2014-05-09 05:22:09

例如 GetDC 需要releasedc
myDC->SelectObject返回的,要再一次SelectObject

请问 如下代码 需要释放哪些资源
CClientDC dc(this);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

if(!m_dcCompatible.m_hDC)
{
m_dcCompatible.CreateCompatibleDC(&dc);
}
//CRect rect;
//GetClientRect(&rect);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc,30,30);
m_dcCompatible.SelectObject(&bitmap);
m_dcCompatible.BitBlt(0,0,30,30,&dc,0,0,SRCCOPY);
m_dcCompatible.SelectObject(pBrush);

如果 bitmap.DeleteObject();
dcCompatible.DeleteDC(); 是否必要 dc 是否需要释放
...全文
231 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
w327115047 2014-05-19
  • 打赏
  • 举报
回复
dc里面画了内容后,再画图时原来的还在,如何才能清楚呢
w327115047 2014-05-09
  • 打赏
  • 举报
回复
画刷 需要删除吗 ?另外 CClientDC dc(this); 这样得到的dc是否需要释放呢 应该用什么函数
worldy 2014-05-09
  • 打赏
  • 举报
回复
使用MFC对象,只要不是new出来的可以不要显示释放,这些对象的释构函数会调用对应的方法自动释放,但是如果使用API创建的对象,则必须显示调用对应的释放函数
zhousitiaoda 2014-05-09
  • 打赏
  • 举报
回复
bitmap.DeleteObject();不需要,因为CBitmap从CGDIObject派生,后者的析构会自动调用这个

_AFXWIN_INLINE CGdiObject::~CGdiObject()
{
    AFX_BEGIN_DESTRUCTOR

        DeleteObject(); 

    AFX_END_DESTRUCTOR
}
dcCompatible.DeleteDC(); 必须的。还有SelectObject调用要养成一个好习惯,保存返回值,然后下次恢复,还有如果dc选入了位图,要先把位图selectobject出来再释放。
w327115047 2014-05-09
  • 打赏
  • 举报
回复
尤其是 因为 绘图 是在一段循环代码中 比如 这次画了一个矩形 有循环到下一次又画了一个小一点的矩形 结果 输出的时候 两个矩形套在了一起 也就是 图形重合 了 其实是应该分别输出的

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧