MFC 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); 
                }
}

AFAIK 根据文档,这必须泄漏。从公共控件版本 6.0 开始,您可以删除位图。删除返回的位图是不够的。

http://msdn.microsoft.com/en-us/library/windows/desktop/bb760782(v=vs.85(.aspx

在 Microsoft Win32 控件的版本 6 中,使用 STM_SETIMAGE 消息传递给静态控件的位图与后续STM_SETIMAGE消息返回的位图相同。客户端负责删除发送到静态控件的任何位图。

相关内容

  • 没有找到相关文章

最新更新