子ウィンドウを作成し、追加する・・・。
今回は、ウィンドウをアイテムとするリストビューWindowListViewを自作して追加する・・・。
新しい項目で、
WindowListView.hを追加・・・。
子ウィンドウなのでリソースIDを定義・・・。
ハンドラOnCloseと、OnCloseとOnDestroyの間に子ウィンドウを破棄するDestroyを追加・・・。
また、子ウィンドウバージョンのCreateも追加・・・。
Createはウィンドウクラス名、ウィンドウ名、スタイルなどは固定・・・。
スタイルは、子ウィンドウで一応縦にスクロールができるように・・・。
Destroyでは、DestroyWindowで自身のウィンドウを破棄・・・。これの子ウィンドウはいないのでそれだけ・・・。
あとはこんな感じ・・・。
OnCloseは0を返している・・・。
Window.hで、
Destroyはもともとここに純粋仮想関数として追加・・・。
あと、OnCloseも追加・・・。
そして、OnCommandは純粋仮想関数はやめた・・・。
WM_CLOSEでOnCloseが0以外なら0を返す・・・。
そうすれば、閉じようとしても閉じないウィンドウになる・・・。
OnCloseが0なら、DefWindowProcが処理するのでウィンドウは閉じる仕掛け・・・。
OnCommandは基本的にFALSEを返しておく・・・。
MainWindow.hは、
CWindowListViewオブジェクトポインタm_pWindowListViewと、Destroy、OnCloseを追加・・・。
Destroyでは、m_pWindowListViewのDestroyを呼んで子ウィンドウを破棄した後、m_pWindowListViewを解放・・・。
OnCreateでCWindowListViewオブジェクトを作成して、Createでウィンドウ生成・・・。
親ウィンドウには、hwndを指定・・・。(この時点ではm_hWndはNULLのため・・・。)
OnCloseでDestroyすることで、OnDestroyより前に子ウィンドウを処理することができる・・・。
MainWindowのOnCommandだけメニューを呼び出すようになっている・・・。
それ以外は基本的にWindowクラスのOnCommandを呼び、そこではメニュー処理はされないような流れになる・・・。
これがOnCommandの純粋仮想関数化をやめた理由・・・。
あとはMainApplication.cppで、
WindowListViewのウィンドウクラス登録・・・。
スクロールバーしか見えないが、縦にスクロールできる子ウィンドウが表示されているのである・・・。
https://github.com/bg1bgst333/ObjeqtNote/tree/develop/winapi/win32_blank/vs14/src/ObjeqtNote