MFC HBITMAP内存泄漏不会消失

时间:2013-09-27 10:22:59

标签: c++ memory mfc memory-leaks hbitmap

每当我执行下面的代码时,我在应用程序的任务管理器中的内存不断增加。我在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); 
                }
}

1 个答案:

答案 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消息返回的位图相同。客户端负责删除发送到静态控件的任何位图。