• ベストアンサー

GetStockObjectで取得したGDIオブジェクトハンドルをブラシハンドルにキャストする理由

WINDOWS APIについて質問です。 ウィンドウクラスを登録する際、 winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); という表現をよく使います。 関数GetStockObject()はHGDIOBJを返します。 HGDIOBJもHBRUSHも実体はvoid*です。 なぜわざわざキャストするのでしょうか。

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

  • ベストアンサー
noname#50176
noname#50176
回答No.1

>HGDIOBJもHBRUSHも実体はvoid*です。 その通りで同値です。 しかしあえてそうすることで「ブラシタイプ」 をソース上、明確にできます。 これは「ソースコードのリーダビリティ」と言う考え方です。 例えば、APIの「GetModuleFileNameEx」などの 「HMODULE」箇所は、他関数の「HINSTANCE」タイプの戻り値を 利用できます。 これは同じハンドルポインタ型だからですし、 設計上、意図されているからです。

string
質問者

お礼

ご回答ありがとうございます。 「ソースコードのリーダビリティ」と言う考え方ですか。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • isle
  • ベストアンサー率51% (77/150)
回答No.2

ウチでは論理的なコーディングミスをコンパイラが検出してくれる可能性を上げるために #define STRICT しているのでキャストが無いとコンパイルエラーになる。

string
質問者

お礼

ご回答ありがとうございます。 私の環境でも確かにエラーがでるので不思議に思っていました。 その疑問が解決しました。

すると、全ての回答が全文表示されます。

関連するQ&A