まだ普通のウィンドウプロシージャでメッセージ処理していたので、ウィンドウオブジェクトごとに振り分けるダイナミックウィンドウプロシージャを導入・・・。
Window.hは、
ウィンドウハンドルをキーとし、CWindowオブジェクトポインタを値とするマップm_mapWindowMapを追加・・・。
DynamicWindowProc、それとウィンドウ作成時のOnCreate、ウィンドウ破棄時のOnDestroyも・・・。
Window.cppのStaticWindowProcは、
WM_CREATEで、lpCreateStruct->lpCreateParamsに、CreateWindowの最後の引数で渡したCWindowオブジェクトポインタが格納されているので、それを取り出す・・・。
で、m_mapWindowMapにウィンドウハンドルhwndとそのポインタpWindowのペアを登録・・・。
WM_CREATE以外の時は、逆にhwndを使ってpWindowを取得・・・。
NULLだったらDefWindowProc、そうでなければpWindow->DynamicWindowProcにプロシージャ処理を任せる・・・。
DynamicWindowProcは、
WM_CREATEはOnCreate、WM_DESTROYはOnDestroyに任せる・・・。
その2つのハンドラの中身は、
0を返したり、メッセージループを終了したりと、前回と同じ・・・。
外見は変わらない・・・。