0


0

GDIリソースを処理する方法

誰もがGDIリソースの取り扱いに関する良い文書/記事を知っていますか?

ライフタイムが異なる可能性のあるクラス間でアイコンやビットマップなどのリソースを共有する必要があり、この問題へのアプローチ方法を理解したいと思います。

ミューテックスやその他のカーネルオブジェクトにはDuplicateHandle関数がありますが、GDIには少し混乱させられます。 また、CBitmapがconst演算子HBITMAPを介してHBITMAPを返す方法は、少し怖いです。

再描画のたびにローカルビットマップを作成しないようにしたいので、一部のリソースキャッシングは適切ですが、メインメッセージポンプが実行を開始していない間にC #リソースの作成とロードを開始できるかどうかもわかりません。

良いが、管理可能なほど短いドキュメントが見つからないため、間違ったキーワードを使用しているようです。

1 Answer


1


そのようなドキュメントはありません、それはすべて非常に簡単です。 DeleteObject()をいつ呼び出すかを決定するのは完全にあなた次第です。 また、プログラムのリソース使用量と、必要なときにオブジェクトを動的に作成および破棄する方法のバランスをとる方法を決定します。 非常に大きいビットマップのみを保持する価値があります。 ペンとブラシは非常に安価で、オンザフライで作成および破棄できます。 フォントは、ほとんど必要ないため、多くの場合、プログラムの実行中にのみキャッシュされます。

キャッシングを管理する方法はたくさんあります。たとえば、C ++のshared_ptr <>は、標準の参照カウントパターンを提供します。 しかし、ウィンドウラッパークラスのメンバーとして参照を保持することは非常に一般的です。 同じビットマップが複数のウィンドウで使用されることはあまり一般的ではありません。 うーん。

GDIオブジェクトの作成には、メッセージループは必要ありません。