我正在使用C++編寫Windows應用程序。我使用LoadImage將一個bmp文件加載到DC,並且它正常顯示。但是,當我調用DeleteObject時,內存似乎不會被釋放。 (我使用Windows任務管理器來跟蹤內存使用情況)如何正確使用LoadImage和DeleteObject?
在WM_INITDIALOG部分我這樣做:
static HBITMAP hBitmap = 0;
char* tempPath = "tabView.bmp";
hBitmap = (HBITMAP)LoadImage(NULL,
tempPath, // file containing bitmap
IMAGE_BITMAP, // type = bitmap
0, 0, // original size
LR_LOADFROMFILE); // get image from a file
if(hBitmap)
{
SendMessage(GetDlgItem(hwndDlg, IDC_PICTURE),
STM_SETIMAGE, // message to send
(WPARAM)IMAGE_BITMAP, // bitmap type
(LPARAM)hBitmap); // bitmap handle
}
所以畫面顯示了在DC,和內存增加。並在按鈕我:
int result = DeleteObject(hBitmap);
當我按下按鈕,我檢查結果,它是一個非零值,這是成功。但是IDC_PICTURE仍然會顯示圖片,並且內存保持不變。我想知道是否SendMessage()可能會增加對hBitmap的參考計數...
所以我的問題是:什麼是清理的正確方法?
任務管理器不適合檢查您是否泄漏。把它放在一個永久運行的循環中,看看你是否用完了內存。 – 2012-04-11 20:05:22