概要
MSDNの日本語版の記述がインチキ臭いのは周知の事実らしいが、CreateWindowのlParamの扱いを調べていて、いくらなんでもわからんだろという気がしたので書いておく。
これが日本語版MSDNのCreateWindow関数のlParamの解説
- lpParam
- メッセージの lParam パラメータで渡される 構造体に入れてウィンドウに渡される値へのポインタを指定します。MDI クライアントウィンドウを作成する場合、 構造体へのポインタを指定しなければなりません。
なんかCreateWindowのlParamで渡した値がそのままウィンドウプロシージャのlParamとして渡されそうな記述に見えなくもない。でも構造体ってなんぞ?試しにやってみると、ぜんぜん期待したとおりの値が戻ってこない。
ほんとはどうなのか
これが英語版MSDNのCreateWindow関数のlParamの解説
- LPVOID
- Pointer to a value to be passed to the window through the CREATESTRUCT structure (lpCreateParams member) pointed to by the lParam param of the WM_CREATE message.
This message is sent to the created window by this function before it returns. If an application calls CreateWindow to create a MDI client window, lpParam should point to a CLIENTCREATESTRUCT structure.
If an MDI client window calls CreateWindow to create an MDI child window, lpParam should point to a MDICREATESTRUCT structure. lpParam may be NULL if no additional data is needed.
最初の段落だけ訳すと、「WM_CREATEメッセージのlParamに渡されるCREATESTRUCT構造体のメンバとして渡される値」と言ったところか。
日本語版MSDNでは、明らかにメッセージ名も構造体の名前も抜け落ちている。
補足しておくと、WM_CREATEメッセージのときのlParamはCREATESTRUCTとなっていて、そのメンバのlpCreateParamsが、CreateWindowのlParamとして渡した値となる。

コメントする