一気にウィンドウのクラス化を進める・・・。
ファイルを追加・・・。
Window.hから追加・・・。
ウィンドウマップ、staticなRegisterClassにウィンドウプロシージャ、Createはいろんな指定ができるようにとりあえず3つ・・・。
ダイナミックウィンドウプロシージャ、ハンドラはとりあえずOnCreateとOnDestroyだけ・・・。
ただし、ハンドラは純粋仮想関数なので、実装は派生クラスで定義する・・・。
VS2015だと緑波線でこれを選択して、
勝手にWindow.cppを追加して、定義を作ってくれるので便利・・・。
CWindow::m_mapWindowMapはstaticなので、cpp側にも宣言が要る・・・。
RegisterClassではウィンドウプロシージャはStaticWindowProcとしている・・・。
StaticWindowProcでは、m_mapWindowMapでhwndからCWindowオブジェクトポインタを取得し、それのDynamicWindowProcを呼ぶ・・・。
あとは、
DynamicWindowProcがハンドラに振り分け・・・。
OnCreateとOnDestroyの定義は派生クラスに・・・。
Createは3種類・・・。
位置とサイズを指定するもの、RECTを指定するもの、位置とサイズがお任せで親ウィンドウの場合のもの・・・。
ShowWindowはAPI呼んでるだけ・・・。
次にApplication.hを追加・・・。
メインウィンドウオブジェクトのポインタm_pMainWindowを持つ・・・。
InitInstanceは純粋仮想関数で派生クラスに・・・。
RunとExitInstanceを実装・・・。
Runはアイドル状態の処理のない、シンプルなメッセージループ・・・。
ExitInstanceではm_pMainWindow を解放・・・。
CWindowの派生クラス、CMainWindowには、
OnCreateとOnDestroyだけ・・・。
OnCreateは0を返すだけ・・・。
OnDestroyはPostQuitMessageするだけ・・・。
CApplicationの派生クラス、CMainApplicationは、
InitInstanceだけ・・・。
CWindow::RegisterClassでとりあえず"ObjeqtNote_MainWindow"というウィンドウクラスを登録・・・。
CMainWindowオブジェクトをm_pMainWindowに格納・・・。
m_pMainWindow->Createの省略版でサイズお任せのウィンドウを作成・・・。
m_pMainWindow->ShowWindowでウィンドウを表示・・・。
最後にWinMainは、
CMainApplicationを生成したら、InitInstanceを呼び、成功ならRun、失敗ならExitInstanceを呼ぶ・・・。
Runの中でメッセージループが終ったら、ExitInstanceを呼んでるのでRunの後は呼ばなくていい・・・。
サイズ任せで表示・・・。
ただ表示しているだけだが、内部はこうも変わっている・・・。
https://github.com/bg1bgst333/ObjeqtNote/tree/develop/winapi/win32_blank/vs14/src/ObjeqtNote