読者です 読者をやめる 読者になる 読者になる

VizCommand #11 スケーラブルエディットボックスの作成

改行すると、1行分大きくなり、バックスペースキーを押したときに1行少なくなったら、1行分小さくなるスケーラブルエディットボックスを作る・・・。

ScalableEdit.hは、

行の高さ、行間、行数をメンバとして持っている・・・。
Createでは、高さを指定する引数がない・・・。
OnKeyDown、そして、独自のメッセージハンドラOnSizeChildを宣言・・・。

ScalableEdit.cppは、

Createでは、行の高さを計算してリサイズ・・・。

OnKeyDownでは、リターンキーが押されたとき、ウィンドウの高さを1行分高くし、UM_SIZECHILDを親ウィンドウに通知させる・・・。
バックスペースキーが押されたとき、0列目の場合は1行分小さくして、UM_SIZECHILDを親ウィンドウに通知・・・。
OnSizeChildはここでは使わない・・・。

CScalableEditを持つCScalableEditPanelは、

ScalableEditPanel.hで、m_iLineHeight、OnSizeChildなどを実装・・・。

ScalableEditPanel.cppは、

Createでは高さは適当に・・・。

OnCreateでCScalableEditを作成・・・。
CScalableEdit側のpScalableEdit->m_iLineHeightをCScalableEditPanel側のm_iLineHeightともしておく・・・。
でリサイズ・・・。

ScalableEditのサイズをScalableEditPanelのサイズに合わせるように・・・。

WS_BORDERはやめて、赤い矩形を描画する・・・。

OnSizeChildが来たら、渡されたサイズにリサイズする・・・。

Window.hに、独自メッセージUM_SIZEHILDの定義・・・。
また、WM_USERはまずいのでWM_APPに・・・。

Window.cppで、UM_SIZECHILDに対応できるように・・・。

MainWindow.cppのAddEditで、CScalableEditPanelに差し替え・・・。

OnSizeでScalableEditPanelは横幅をWindowListItemに合わせて、高さはそのまま・・・。

ScalableEditPanelの登録を忘れずに・・・。

f:id:BG1:20161124171250p:plain

1行分のエディットボックスが改行されると、

f:id:BG1:20161124171431p:plain

2行、さらに改行して、

f:id:BG1:20161124171449p:plain

3行となり、
バックスペースで戻っていくと、

f:id:BG1:20161124171547p:plain

2行になり、さらに戻していくと、

f:id:BG1:20161124171601p:plain

1行になる・・・。

https://github.com/bg1bgst333/VizCommand/tree/develop/winapi/win32_blank/vs14/src/VizCommand