私は 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 の参照カウントを増やす可能性があるかどうか疑問に思っています...
だから私の質問は次のとおりです。クリーンアップする適切な方法は何ですか?