アプリ版:「スタンプのみでお礼する」機能のリリースについて

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



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

は、どういう意味なのか、どこが違うのか教えてください。
メインのウインドウのインスタンスをグローバル宣言して
いなかった場合に、プロージャ内でメインのウインドウの
インスタンスを得ているんだと思うんだけど、細かい部分の
説明をしてほしいです。

A 回答 (2件)

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



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

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

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

ありがとうございます。

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

CREATESTRUCT は WM_CREATE の後でも使えました。
WM_CREATE の中で GetWindowLong() を使うこともできました。

お礼日時:2002/03/26 22:07

どちらもアプリケーションのインスタンスハンドルを取得しています。



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

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

で、細かい部分とは?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!