VizCommand #15 親ウィンドウのサイズを子ウィンドウのサイズに合わせる&スカラブルエディットボックスパネルの定義

スカラブルエディットボックスの親クラス、スカラブルエディットボックスパネルを定義する。
そして、スカラブルエディットボックスのサイズが1行分大きくなったら、スカラブルエディットボックスパネルのサイズも1行分大きくなり表示テキストが隠されないようにする。

resource.hに、

独自のウィンドウメッセージUM_SIZECHILDを定義する。
これは、WM_SIZEの逆で、子ウィンドウの大きさが変化した時に発生するようにしたメッセージ。

Window.hで、

独自ウィンドウメッセージに対する処理を定義するOnUserMessageを追加。

Window.cppで、

defaultの時にOnUserMessageを呼ぶようにする。

何もしない。

UserControl.hで、

RegisterClassのhBrush版を追加。

UserControl.cppで、

CWindow::RegisterClassのhBrush版を呼ぶ。

ScalableEditBoxPanel.hを追加して、

CEditBoxPanelベースのCScalableEditBoxPanel。
OnUserMessageとOnSizeChildを用意。

ScalableEditBoxPanel.cppは、

m_pEditBoxには、CScalableEditBoxオブジェクトポインタを格納。
OnUserMessageに来た時、UM_SIZECHILDならOnSizeChildに任せる。
OnSizeChildでは、MoveWindowでlParamで渡されたウィンドウのサイズに親ウィンドウのサイズを合わせる。
実は、lParamで渡されたhWndはCScalableEditBoxであり、hParentがCScalableEditBoxPanel自身なので、結果的にはCScalableEditBoxPanelがCScalableEditBoxのサイズに調整されることになる。
よって、CScalableEditBoxが1行分大きくなると、CScalableEditBoxPanelもその大きさになる。

ScalableEditBox.hは、

OnSizeを追加。

ScalableEditBox.cppは、

MoveWindowで自身のウィンドウサイズを変更したら、親ウィンドウにSendMessageでUM_SIZECHILDを投げることで、親ウィンドウも同じ大きさになる。
CScalableEditBoxの親であるCScalableEditBoxPanelに投げている。

MainWindow.hは、

CScalableEditBoxPanelオブジェクトポインタのm_pScalableEditBoxPanelに変更。

MainWindow.cppで、

m_pScalableEditBoxPanel->Createでスカラブルエディットボックスパネルを生成し表示。

MainApplication.cppでは、

CMainWindowはグレー、CScalableEditBoxPanelはライトグレーにしてる。
ただし、CScalableEditBoxPanelの上にCScalableEditBoxが乗り、サイズが一緒なのでライトグレーは見えることは無いと思う。

CustomControl.cppで、

こちらもOnUserMessageに対応する。

f:id:BG1:20170501185654p:plain

1行。

f:id:BG1:20170501185719p:plain

2行。

f:id:BG1:20170501185744p:plain

3行。

f:id:BG1:20170501185759p:plain

2行。

f:id:BG1:20170501185821p:plain

1行。
このように、パネルの上に乗せても隠れない。

・親ウィンドウのサイズを子ウィンドウのサイズに合わせる · bg1bgst333/VizCommand@607b263 · GitHub