改行するたびに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を呼ぶようにする。
最初は1行分。
このようになる。これで改行すると、
2行分になる。
また文字列を入力してさらに改行。
3行になる。
バックスペースを入力すると、
2行になり、その行すべてを消して先頭に来たところで、さらにバックスペースを入力すると、
1行になる。