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

VizCommand #7 ウィンドウリストアイテムの子ウィンドウの管理

ウィンドウリストアイテムの管理は、CWindowListView(さらにその内部のCWindowListItemsPanel)で行うが、それより下のウィンドウの管理はMainWindow側にしようと思う・・・。これ以上階層化すると大変そうなので・・・。
ウィンドウリストアイテムのハンドルを取得したら、そこからはある程度は自由に配置できるようにしたほうがいいかなと・・・。

エディットボックスの外側のウィンドウとして、EditPanelを追加する・・・。
エディットボックスの色を変えるには親クラスが必要なので、これは2段構成の外側のウィンドウ・・・。

普通のウィンドウなので、特に他の機能は載せていない・・・。

子ウィンドウはMainWindow上のマップで管理する・・・。

マップのアイテムはChildMapItem・・・。
ウィンドウリストアイテムのインデックスと、子ウィンドウオブジェクトポインタをメンバに持つ・・・。

コンストラクタで引数をセットしてるだけ・・・。とりあえずはこれだけで・・・。

マップはChildMap・・・。

std::mapでキーが文字列、値はChildMapItemポインタ・・・。
アイテムの追加、削除、取得・・・。

とりあえずは、std::mapの操作を呼ぶだけ・・・。
タグとなる文字列をキーにして、どのウィンドウリストアイテムにどのウィンドウオブジェクトが入っているかを管理する・・・。
(たぶん、孫ウィンドウとかも可能な気がする・・・。解放順がネックになるかもだが・・・。)

CWindowListViewにアイテムを取得するGetを追加・・・。
実際には、CWindowListItemsPanelに丸投げ・・・。

こんな風にm_vecpWindowListからindexのアイテムを返す・・・。

アイテムの位置は50から元の0に戻している・・・。

MainWindowは、

これまでのアイテムは消して、1つだけにして高さも200に・・・。
m_pWindowListView->Getでm_pWindowListItemを取得し、そのm_hWndが親となる幅、高さが50な小さい正方形EditPanelウィンドウを、pEditPanel->Createで生成・・・。
そのあと、タグ文字列を"0"として、m_pChildMap->Addでインデックスの0とpEditPanelを追加・・・。

Destroyでは、追加したアイテムの子ウィンドウの破棄・・・。

MainApplicationでは、ウィンドウクラス"EditPanel"追加・・・。

これで、

f:id:BG1:20161113230022p:plain

ウィンドウリストアイテムの子ウィンドウとして幅、高さが50な正方形ウィンドウを表示できた・・・。

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