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

VizCommand #6 スクロールバー対応

ウィンドウリストビューにスクロールバーを実装していく・・・。

その前に、スクロールでウィンドウリストアイテムを1つずつ動かすのはちょっとパフォーマンス的に微妙なので、WindowListViewとWindowListItemの間にWindowListItemsPanelという新しいクラスを挟み、こちらにWindowListItemのリストを持たせることにした・・・。
WindowListViewは、WindowListItemsPanelという1つのウィンドウを動かすような形に変更・・・。
WindowListItemsPanelの下にWindowListItemが挿入される形・・・。

WindowListItemsPanel.hは、

このようにm_vecpWindowListを持っていたり、

WindowListItemsPanel.cppは、

InsertやDeleteと、これまでのWindowListViewの機能を移植・・・。

WindowListView.cppは、

生成時のOnCreateや、

ウィンドウサイズが変わった時のOnSizeなどで、スクロールバーの最大値などが変わってしまうので、ここも結構なキモかな・・。

でOnVScrollもまあ大変・・・。
WindowListViewよりもWindowListItemsPanelが大きい場合に、スクロールバーを動かせるわけだが・・・。
スクロール下限に着いてから、ウィンドウサイズを下に広げた後に、広げた分も含めて上に戻っていくとき、徐々にスクロールバーを縮めて、きちんと上限ぴったりに戻ってこないといけなくて、そこの処理がどうしてもしっくりくるものにはならなくて諦めた・・・。
それでも、最後には上限に合うようにはなったのだが、つまみをドラッグしながら変化させられるようにはならなかった・・・。

Window.cppに、WM_MOVEやWM_SIZEの処理も追加・・・。

WindowListItemsPanel.cppのOnSizeでアイテムの位置を50ずらして見やすく・・・。

OnPaintでWindowListItemsPanelの領域を緑の矩形で囲み、これを確認するため・・・。

MainWindow.cppでは、これだけのアイテムを追加して、

MainApplication.cppでは、"WindowListItemsPanel"ウィンドウクラスを追加・・・。

ちょっと動かしてみよう・・・。

f:id:BG1:20161112231429p:plain

縦を狭くして、スクロールできるように・・・。
スクロールバーをつまみで下に・・・。

f:id:BG1:20161112231518p:plain

下できっちりそろう・・・。
ここでウィンドウを下に広げる・・・。

f:id:BG1:20161112231606p:plain

こんな風になるが、

f:id:BG1:20161112231645p:plain

つまみを押したり、離したりで、

f:id:BG1:20161112231720p:plain

徐々に調整されて、

f:id:BG1:20161112231925p:plain

最終的に上限に合う・・・。

f:id:BG1:20161112231940p:plain

下も広げていた部分が調整されて、下限に合うようになっている・・・。
この動きをやるのさえ、本当に大変だった・・・。
今回はこれぐらいにしとこう・・・。

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