質問: win32apiのメッセージループについて。 win32api用のラッパーを作ろうとしているのですが、現在、前提条件としていることが正しいかどうかの判断がつきかねるため、質問させていただきます。 createwindow関数で返されるhwndは、どのような状況においても、メッセージループのコールバック関数であるwndproc関数の第一引数hwndと同一でしょうか? また、この値が一致しないときがあるとすれば、どういったときでしょうか? (たとえばhook関数を適用されたら値が変わってしまうのか?) 分かる方がいらっしゃいましたら、お願いいたします。
回答: > (たとえばhook関数を適用されたら値が変わってしまうのか?) フックして書き換えるといわれてますか? hwndはウィンドウ識別用のハンドラなので、知らないところで書き換えた場合、 動作は保証できないでしょう。一般的には想定外/未対応な仕様と謳ってもいいのでは。 > createwindow関数で返されるhwndは、どのような状況においても、 > メッセージループのコールバック関数であるwndproc関数の第一引数hwndと同一でしょうか? 一般的な動作で結果が変わるケースは、例えば以下です。 wm_createが-1を返すと、引き数のhwndは破棄されてcreatewindowはnullが返ります。 (msdnのwm_create参照) ということはすなわち「どのような状況においても」は否です。