CStatic::SetBitmap导致的内存泄露问题
由于需要动态的改变控件的图标显示,程序中对同一控件多次调用了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函数内部为什么没有自动把没用的资源释放掉?