每当我执行以下代码时,我在应用程序的任务管理器中的内存就会不断增加。我在stackoverflow上发现了类似的问题,我做了一些DeleteObject调用,就像他们所说的那样,但这仍然没有解决执行此代码时不断增加的内存。
如何解决这个问题?我做错了什么?
SetControlPicture(const UINT ID_PICTURE_CONTROL)
{
CImage image;
CBitmap bitmap;
HRESULT hresult;
CStatic* pItem = (CStatic*)GetDlgItem(ID_PICTURE_CONTROL);
hresult = image.Load(_T("./Data/Images/RED_ON.png"));
if(hresult != E_FAIL)
{
HBITMAP hBitMap = image.Detach();
bitmap.Attach(hBitMap);
HBITMAP hBitMapPrev = pItem->SetBitmap(bitmap);
if (hBitMapPrev)
{
DeleteObject(hBitMapPrev); // *** do not forget to delete the previously associated bitmap
}
DeleteObject(hBitMap);
}
}
AFAIK 根据文档,这必须泄漏。从公共控件版本 6.0 开始,您可以删除位图。删除返回的位图是不够的。
http://msdn.microsoft.com/en-us/library/windows/desktop/bb760782(v=vs.85(.aspx
在 Microsoft Win32 控件的版本 6 中,使用 STM_SETIMAGE 消息传递给静态控件的位图与后续STM_SETIMAGE消息返回的位图相同。客户端负责删除发送到静态控件的任何位图。