每当我执行下面的代码时,我在应用程序的任务管理器中的内存不断增加。我在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);
}
}
答案 0 :(得分:0)
AFAIK根据文件,这必须泄漏。自Common Control ver。 6.0你可以删除Bitmap。删除返回的位图是不够的。
http://msdn.microsoft.com/en-us/library/windows/desktop/bb760782(v=vs.85).aspx
在Microsoft Win32控件的版本6中,使用STM_SETIMAGE消息传递给静态控件的位图与后续STM_SETIMAGE消息返回的位图相同。客户端负责删除发送到静态控件的任何位图。