由於需要動態的改變控件的圖標顯示,程序中對同一控件多次調用了SetBitmap方法,結果導致了內存泄露。
解決方法如下:
HBITMAP hBmpOn; HBITMAP oldBmp; image.Load(_T("res/led_green.png")); hBmpOn = image.Detach(); oldBmp = (*it)->SetBitmap(hBmpOn); if ( oldBmp != NULL ) { DeleteObject(oldBmp); } if ( hBmpOn != NULL ) { DeleteObject(hBmpOn); }
關鍵是需要手動將以前set過的資源用DeleteObject釋放掉。
問題雖然解決了,但是不太明白為什么SetBitmap函數內部為什么沒有自動把沒用的資源釋放掉?