• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CREATESTRUCT と GetWindowLong)

CREATESTRUCTとGetWindowLongの違いと意味について教えてください

このQ&Aのポイント
  • CREATESTRUCTとは、ウィンドウが作成される際に使用される構造体のことです。一方、GetWindowLongは指定されたウィンドウの情報を取得するための関数です。
  • CREATESTRUCTは、ウィンドウの作成時に必要な情報を格納するために使用されます。一方、GetWindowLongは、指定されたウィンドウの指定された情報を取得するために使用されます。
  • CREATESTRUCTは、ウィンドウが作成される際に使用される構造体であり、ウィンドウの作成時に必要な情報を格納します。一方、GetWindowLongは、指定されたウィンドウの指定された情報を取得するための関数です。

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

No.1 の wr250zb さんと同じような回答しかできませんが、参考まで。 GetWindowLong() を使う場合には、ウィンドウハンドルが取得できているもの全てに 対してインスタンスハンドルを取得できますが、lParam からインスタンスハンドルを 取得するのは、WndProc が属するアプリケーションだけで、かつ、WM_CREATE メッセージが 発生したときだけ、という制限があります。 試したわけではないのと、純粋な Win32 アプリケーションを組まなくなって久しいので 自信がありませんが、WM_CREATE メッセージが出ているときにはウィンドウが生成中なので GetWindowLong() を使ってインスタンスハンドルを取得できないかもしれません。 WinMain() と WndProc() が同じスコープにあれば、静的な変数を媒介してインスタンス ハンドルを受け渡せば良いのかもしれませんが。

A__
質問者

お礼

ありがとうございます。 WM_CREATE の前でなら GetWindowLong() しか使えず、 WM_CREATE の後でならどちらも使えるということですね。 CREATESTRUCT は WM_CREATE の後でも使えました。 WM_CREATE の中で GetWindowLong() を使うこともできました。

その他の回答 (1)

  • wr250zb
  • ベストアンサー率41% (7/17)
回答No.1

どちらもアプリケーションのインスタンスハンドルを取得しています。 CREATESTRUCTで取るのはWM_CREATEメッセージが来たとき のパラメータ(lParam)からアクセスしています。 GetWindowLongはhWndで指定したウィンドウに対して 指定した(この場合GWL_HINSTANCE)種類の4バイト データを要求しています。指定した値の種類がGWL_HINSTANCEなんでインスタンスハンドル値が 戻って来ます。 で、細かい部分とは?

関連するQ&A