これまで、アイテムズパネルが大きくなってスクロールバーが出てきて、どんどんウィンドウリストアイテムが追加されていっても、下に自動でスクロールされることはなく、自分で下までスクロールしないといけなかったが、今回は自動スクロールに対応する。
resource.hに、
新しい独自メッセージUM_REQUESTSCROLLBOTTOMを追加。
StreamConsoleItemsPanel.hを追加し、
CWindowListItemsPanelの派生クラスとしてCStreamConsoleItemsPanelを定義し、OnSizeChildだけオーバーライド。
StreamConsoleItemsPanel.cppで、
特定のアイテムのリサイズや、ウィンドウサイズの変更を経て、UM_REQUESTSCROLLBOTTOMをSendMessageする。投げ先にiTotalHeightを渡すようにする。
StreamConsole.hに、
OnRequestScrollBottomを追加。
StreamConsole.cppで、
OnUserMessageでUM_REQUESTSCROLLBOTTOMならOnRequestScrollBottomを呼ぶようにし、
スクロール可能になった時、渡されたiTotalHeightをm_ScrollInfo.nMax、
一番下に移動するようにm_ScrollInfo.nMax - m_ScrollInfo.nPageをm_ScrollInfo.nPosにセットして、SetScrollInfoを呼ぶ。
そしてm_pWindowListItemsPanel->MoveWindowでm_ScrollInfo.nPosの分だけ上にパネルを移動させる。
m_pWindowListItemsPanelには、CWindowListItemsPanelのインスタンスに代わって、CStreamConsoleItemsPanelのインスタンスを入れる。
ここでギリギリ・・・。ここでリターンを押すと、
スクロールバーが発生するが、ちゃんと下にスクロールしてる。
もちろん上にスクロールバーで移動しても切れたりはしていない。
listコマンドを打ってみると、
さらに下にスクロールしていく。
・アイテムズパネルが大きくなるたびに自動的に下にスクロール · bg1bgst333/VizCommand@e5dd654 · GitHub