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

VizCommand #4 ウィンドウリストアイテムの追加と削除

いよいよ、ウィンドウリストビューにアイテムとなるウィンドウを追加していく・・・。

まず、

f:id:BG1:20161106001211p:plain

新しい項目で、

f:id:BG1:20161106001226p:plain

WindowListItem.hを追加・・・。

ウィンドウの位置とサイズをメンバに・・・。
あと、ちょっとしたテキスト表示用の文字配列・・・。

WindowListItem.cppは、

Createでウィンドウを作成・・・。WS_BORDERでボーダーを付ける・・・。
と同時に位置とサイズをメンバにセット・・・。

ここでのSetWindowTextは、Win32APIのそれではなくて、単純にm_tszTextにテキストをセットするだけ・・・。

OnPaintでTextOutでm_tszTextのテキストを描画・・・。

またMoveWindowは指定の位置にウィンドウ移動したりサイズを変更したり・・・。

で、このWindowListItemを追加するWindowListViewだが、

WindowListView.hには、CWindowListItemのポインタを要素に持つvectorのm_vecpWindowList、挿入メンバ関数Insert、削除メンバ関数Delete、それとOnSizeを追加・・・。

WindowListView.cppでは、

Insertで、指定された位置indexに指定された高さheightのCWindowListItemウィンドウを作成し、m_vecpWindowListにポインタを格納・・・。
挿入位置以降のウィンドウを下にずらしたり、マイナスやサイズを超える位置を指定された場合の処理にも対応・・・。
挿入位置をテキストに変換して、SetWindowTextでセットもしておく・・・。

Deleteで、指定された位置indexのウィンドウを削除し、m_vecpWindowListからも削除・・・。
こちらは削除した時に上にずらす処理はまだ未対応・・・。

Destroyでm_vecpWindowListのウィンドウをすべて削除・・・。

OnSizeは、すべての子ウィンドウの幅を親ウィンドウのクライアント領域の幅に合わせるというだけ・・・。

OnPaintやOnSizeなど新たなハンドラは、

Window.hにベースが・・・。SetWindowTextやMoveWindowも・・・。

でWM_SIZE、WM_PAINTに対応し、

こんな風にメンバ関数とハンドラを用意・・・。といっても、ダミーで中身は派生クラスに定義している・・・。

MainWindowでは、OnCreateで、m_pWindowListView->Insertでどんどん挿入・・・。
最後に1の位置に挿入して、挿入できてるかを確認・・・。

OnSizeでは、MoveWindowでWindowListViewサイズをMainWindowいっぱいに・・・。
これでWindowListViewのOnSizeが呼ばれて、WindowListItemの横幅もいっぱいに・・・。

WindowListItemもウィンドウクラス登録・・・。

f:id:BG1:20161106014956p:plain

こんな風にリスト状に子ウィンドウが追加される・・・。

1が2つ並んでいるが、最後の1の挿入で、下の1の上に1がきちんと挿入されていることを示している・・・。

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