HICON泄漏
通常,我们使用的HICON对象只需用DestroyIcon后就不存在内存泄漏了,但是当我们使用GetIconInfo后会发现程序GDI资源存在泄漏,原因是GetIconInfo会产生2个HBITMAP对象,即ICONINFO结构体中的hbmColor和hbmMask,需要DeleteObject掉。切记切记!!!
CString strValue(_T(""));
HICON hIcon = NULL;
hIcon = ExtractIcon(AfxGetInstanceHandle(), strValue, 0);
if(hIcon)
{
CRect rcIcon;
GetClientRect(&rcIcon);
ICONINFO icoInfo;
GetIconInfo(hIcon, &icoInfo);
rcIcon.left += rcIcon.Width()/2-icoInfo.xHotspot;
rcIcon.top += rcIcon.Height()/2-icoInfo.yHotspot;
DeleteObject(icoInfo.hbmColor);
DeleteObject(icoInfo.hbmMask);
DrawIcon(pDC->m_hDC, rcIcon.left, rcIcon.top, hIcon);
DestroyIcon(hIcon);
}
posted on 2014-04-29 17:20 SpringStudio 阅读(608) 评论(0) 编辑 收藏 举报