ウィンドウリストビューにスクロールバーを実装していく・・・。
その前に、スクロールでウィンドウリストアイテムを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"ウィンドウクラスを追加・・・。
ちょっと動かしてみよう・・・。
縦を狭くして、スクロールできるように・・・。
スクロールバーをつまみで下に・・・。
下できっちりそろう・・・。
ここでウィンドウを下に広げる・・・。
こんな風になるが、
つまみを押したり、離したりで、
徐々に調整されて、
最終的に上限に合う・・・。
下も広げていた部分が調整されて、下限に合うようになっている・・・。
この動きをやるのさえ、本当に大変だった・・・。
今回はこれぐらいにしとこう・・・。
https://github.com/bg1bgst333/VizCommand/tree/develop/winapi/win32_blank/vs14/src/VizCommand