• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SetBkModeやSetTextColorは…)

GDIでのSetBkModeやSetTextColorについての疑問

このQ&Aのポイント
  • GDIで使用するSetBkModeやSetTextColorについて、msdnのSelectObjectの解説に目を通した時に疑問が生じました。
  • msdnの解説には、SelectObjectは指定されたオブジェクトを返すと書かれていますが、SetBkModeやSetTextColorについてはそのような表記はありません。
  • 実際にはこれらの関数は、ReleaseDCやEndPaintの前に初期状態に戻すべきなのでしょうか、それとも戻さなくても問題はないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • byDesign
  • ベストアンサー率75% (45/60)
回答No.1

SelectObjectするという事は、自分でリソース(ペンやブラシ)を作成しそのリソースを設定すると思います。 (※例外もあるけど) 自分で作成したリソースは、開放(DeleteObject)する必要があります。 質問のSelectObject説明は、この開放時にDCに関連づけたままやっちゃ駄目よ。と(遠まわしに)説明しているのです 説明の『新しいオブジェクトを使い終えたら』というのは、リソースを使い終えたらという事。 リソースを使い終えたら、解放処理をするのだがDCに関連付いているので 元の値に戻して関連付けを解除しないといけません。 上記を踏まえて、SetBkModeやSetTextColorを考えると 開放なんてする必要ないので、元にもどす必要もない。 という事です。

LongSecret
質問者

お礼

どうもありがとうございます♪ なるほど、そういうことだったのですか。 SelectObjectしておいて開放時にDCに関連づけたままはやばいですね。失敗するだったか、XPだとゾンビ化するだったか忘れましたが、そういう事はしっかりと配慮しています。 アプリケーション開始時にstatic専用のクラスで確保し、終了時に解放、とすれば、毎回生成するコードなしで、SelectObjectで挟み込むだけでOKとなるので、頻繁に使うやつはそのようにしています。 とりあえず、SetBkModeやSetTextColorなどに関しては、数値の設定だけなので問題ない、というわけですね。

関連するQ&A