通常,我们使用的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);
}
HICON泄漏,码迷,mamicode.com
时间: 2024-10-08 19:34:52