Я работаю над приложением Windows с C++. Я загружаю файл BMP в DC с использованием LoadImage, и он отображается правильно. Однако, когда я вызываю DeleteObject, память, похоже, не освобождается. (Я использую окна диспетчера задач для отслеживания использования памяти)Как правильно использовать 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 ...
Итак, мой вопрос: что такое правильный способ очистки?
Диспетчер задач не подходит для проверки утечки. Поместите это в цикл, который работает вечно, и посмотрите, не закончилось ли вы или нет. –