我正在使用 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 上的引用计数...
所以我的问题是:清理的正确方法是什么?