• ベストアンサー

Win32APIのメッセージループについて。

Win32API用のラッパーを作ろうとしているのですが、現在、前提条件としていることが正しいかどうかの判断がつきかねるため、質問させていただきます。 CreateWindow関数で返されるHWndは、どのような状況においても、メッセージループのコールバック関数であるWndProc関数の第一引数HWndと同一でしょうか? また、この値が一致しないときがあるとすれば、どういったときでしょうか? (たとえばhook関数を適用されたら値が変わってしまうのか?) 分かる方がいらっしゃいましたら、お願いいたします。

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

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

> (たとえばhook関数を適用されたら値が変わってしまうのか?) フックして書き換えるといわれてますか? HWNDはウィンドウ識別用のハンドラなので、知らないところで書き換えた場合、 動作は保証できないでしょう。一般的には想定外/未対応な仕様と謳ってもいいのでは。 > CreateWindow関数で返されるHWndは、どのような状況においても、 > メッセージループのコールバック関数であるWndProc関数の第一引数HWndと同一でしょうか? 一般的な動作で結果が変わるケースは、例えば以下です。 WM_CREATEが-1を返すと、引き数のHWNDは破棄されてCreateWindowはNULLが返ります。 (MSDNのWM_CREATE参照) ということはすなわち「どのような状況においても」は否です。

shirousa01
質問者

お礼

回答ありがとうございます。 すっかり忘れていましたが、確かにWM_CREATEが流れるときはCreateWindowが返りませんから、クラスの仮想関数を読み出せないですね。 この程度でしたら、対応できそうです。 一般の動作で異なることがあるとすれば、それはWM_CREATEくらいでしょうか?

関連するQ&A