改行するたびに1行分大きくなり、バックスペースで1行分のテキストが減るたびに小さくなる「スカラブルエディットボックス」を定義する。

resource.hで、

リソースIDとしてIDC_SCALABLEEDIT1を追加。
また、ちょっと数字を変えている。

Window.hは、

ブラシハンドルを指定できるRegisterClassと、

OnKeyDownを追加。

Window.cppで、

RegisterClassで指定したhBrushをwc.hbrBackgroundに指定。

WM_KEYDOWNならOnKeyDownを呼ぶ。

OnKeyDownは定義しない。

ScalableEditBox.hを追加し、

1行の高さm_iLineHeight、行数m_iLineCount、コンストラクタ、デストラクタに、OnCreate、OnKeyDownなどのハンドラ。

ScalableEditBox.cppは、

OnCreateでは、WM_GETFONT、GetTextMetricsなどで、1行分の高さを取得し、その高さに合わせる。

OnKeyDownのたびに改行なら、1行分大きくする。
バックキーなら、列の先頭なら1行分小さくする。

MainWindow.hで、

CScalableEditBoxオブジェクトポインタm_pScalableEditBoxと、RegisterClassのブラシハンドル版を追加。

MainWindow.cppでは、

CWindow::RegisterClassのブラシハンドル版hBrushを指定。

m_pScalableEditBox->Createでスカラブルエディットボックス表示。

MainApplication.cppは、

GetStockObject(LTGRAY_BRUSH)でCMainWindowの背景はライトグレーブラシとする。

CustomControl.cppでは、

こちらも、WM_KEYDOWNでOnKeyDownを呼ぶようにする。

f:id:BG1:20170501162752p:plain

最初は1行分。

f:id:BG1:20170501162809p:plain

このようになる。これで改行すると、

f:id:BG1:20170501162835p:plain

2行分になる。

f:id:BG1:20170501162856p:plain

また文字列を入力してさらに改行。

f:id:BG1:20170501162922p:plain

3行になる。

バックスペースを入力すると、

f:id:BG1:20170501162945p:plain

2行になり、その行すべてを消して先頭に来たところで、さらにバックスペースを入力すると、

f:id:BG1:20170501163036p:plain

1行になる。

・スカラブルエディットボックスの定義 · bg1bgst333/VizCommand@84924c4 · GitHub