0

これが以前に回答されている場合は申し訳ありませんが、回答を見つけることができませんでした。

Win32 アプリケーションでペイントを行っていますが、オブジェクト (四角形など) を 1 回だけペイントする必要があるシナリオがかなりあります。現在、このためのブラシを作成している方法は次のとおりです。

HBRUSH sampleBrush = CreateSolidBrush(RGB(1, 119, 158));
SelectObject(myDC, sampleBrush);
// Do some painting on DC using brush
DeleteObject(sampleBrush);

ブラシの作成、ハンドルの保存、DC への選択、ブラシの使用、メモリの解放。

ただし、代わりに次のことを行う場合:

SelectObject(myDC, CreateSolidBrush(RGB(1, 119, 158)));

作成したブラシのハンドルを保存していないため、メモリ管理が必要ですか? もしそうなら、どうすればメモリを解放できますか?

4

1 に答える 1

3

関数CreateSolidBrushは、あなたがそれをどのように使用しているかを知ることができません。ハンドルを保存していないことを認識できないため、自動クリーンアップを実行します。のドキュメントでは、返されたハンドルを使用してCreateSolidBrush呼び出す必要があると指定されているDeleteObjectため、これらの要件を確実に順守する必要があります。

ハンドルを保存しないと、ハンドルにアクセスできなくなり、オブジェクトが確実に破棄されなくなります。

于 2013-05-01T11:39:06.630 に答える