我正在使用C的Windows应用程序 . 我使用LoadImage将bmp文件加载到DC,并且它正确显示 . 但是,当我调用DeleteObject时,内存似乎没有被释放 . (我使用Windows任务管理器来跟踪内存使用情况)
在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上的引用计数...
所以我的问题是:清理的正确方法是什么?
1 回答
您没有提到您正在使用的Windows版本 . 无论如何,如果您阅读STM_SETIMAGE的"Important"部分,您会看到下一个:
也许这不仅适用于Windows XP,也适用于Windows的更高版本 . 希望这会帮助你 .