• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DeleteObjectについて(初心者です))

DeleteObjectについて初心者です

このQ&Aのポイント
  • DeleteObjectとは、オブジェクトを破棄するための関数です。
  • WndProc関数内でのDeleteObjectの使い方について疑問があります。
  • GetStockObjectで取得したオブジェクトをSelectObjectで選択している場合、DeleteObjectによってオブジェクトを破棄するかどうか疑問です。

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

  • ベストアンサー
回答No.2

> ということは、このHPに載ってるソースでは作成したペンを破棄しないといけないのにブラシを破棄しているため、少しばかり間違っていると考えて大丈夫でしょうか? 私はそう判断します。 サイトにも、 > もし、デバイスコンテキストを破棄する前にペンを削除したいならば > 別のペンオブジェクトをデバイスコンテキストに選択させてから削除します と書かれてますし。

mrk3_12
質問者

お礼

多分理解できたので、凄いスッキリしました。 回答ありがとうございました。

その他の回答 (1)

回答No.1

SelectObjectは、選択したリソースの種類によって返ってくるものが異なります。 ブラシのハンドルを選択した場合は以前に選択されていたブラシを、ペンのハンドルを選択した場合は以前に選択されていたペンを返します。 下記URLの解説にも「この関数は、指定されたのと同じタイプで、それまで選択されていたオブジェクトを返します。」と書かれています。 SelectObject http://msdn.microsoft.com/ja-jp/library/cc410576.aspx なので、作成したペンを削除したい場合に、 > DeleteObject(SelectObject(hdc , GetStockObject(WHITE_BRUSH))); とするのは間違いです。 この場合、SelectObjectが返すのは元々選択されていたブラシのハンドルになります。 そもそも、デバイスコンテキストの状態は元に戻しておくのが基本で、元々選択されていたペンを保存せずにストックオブジェクトを選択して元に戻した(のと同じ)つもりになっているのは、動作上問題がないとしてもおすすめしません。ハンドルを保存しておくのが面倒なのであれば、SaveDCとRestoreDCを使う方がいいでしょう。

mrk3_12
質問者

補足

分かりやすい説明ありがとうございます。 ということは、このHPに載ってるソースでは作成したペンを破棄しないといけないのにブラシを破棄しているため、少しばかり間違っていると考えて大丈夫でしょうか?

関連するQ&A