OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

CREATESTRUCT と GetWindowLong

  • 暇なときにでも
  • 質問No.241325
  • 閲覧数480
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 59% (194/328)

HINSTANCE hInst;
CREATESTRUCT *lpcrea;
lpcrea = (CREATESTRUCT *)lParam;
hInst = lpcrea->hInstance;



HINSTANCE hInst;
hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);

は、どういう意味なのか、どこが違うのか教えてください。
メインのウインドウのインスタンスをグローバル宣言して
いなかった場合に、プロージャ内でメインのウインドウの
インスタンスを得ているんだと思うんだけど、細かい部分の
説明をしてほしいです。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

No.1 の wr250zb さんと同じような回答しかできませんが、参考まで。

GetWindowLong() を使う場合には、ウィンドウハンドルが取得できているもの全てに
対してインスタンスハンドルを取得できますが、lParam からインスタンスハンドルを
取得するのは、WndProc が属するアプリケーションだけで、かつ、WM_CREATE メッセージが
発生したときだけ、という制限があります。

試したわけではないのと、純粋な Win32 アプリケーションを組まなくなって久しいので
自信がありませんが、WM_CREATE メッセージが出ているときにはウィンドウが生成中なので
GetWindowLong() を使ってインスタンスハンドルを取得できないかもしれません。

WinMain() と WndProc() が同じスコープにあれば、静的な変数を媒介してインスタンス
ハンドルを受け渡せば良いのかもしれませんが。
お礼コメント
A__

お礼率 59% (194/328)

ありがとうございます。

WM_CREATE の前でなら GetWindowLong() しか使えず、
WM_CREATE の後でならどちらも使えるということですね。

CREATESTRUCT は WM_CREATE の後でも使えました。
WM_CREATE の中で GetWindowLong() を使うこともできました。
投稿日時 - 2002-03-26 22:07:19
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル7

ベストアンサー率 41% (7/17)

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

CREATESTRUCTで取るのはWM_CREATEメッセージが来たとき
のパラメータ(lParam)からアクセスしています。

GetWindowLongはhWndで指定したウィンドウに対して
指定した(この場合GWL_HINSTANCE)種類の4バイト
データを要求しています。指定した値の種類がGWL_HINSTANCEなんでインスタンスハンドル値が
戻って来ます。

で、細かい部分とは?


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ