CListCtrl: Как сохранить положение прокрутки?
У меня есть CListCtrl (стиль отчета), где я очищаю список и повторно заселяю его в определенное время. При этом я хотел бы сохранить вертикальную позицию прокрутки. Я вижу, что есть несколько методов, которые выглядят многообещающе:
EnsureVisible()
GetScrollPos()
SetScrollPos()
GetScrollInfo()
GetTopIndex()
Scroll()
Я пытаюсь GetScrollPos(), а затем SetScrollPos(), но он не работает. Каков простой правильный способ сохранить положение прокрутки, а затем восстановить его?
UPDATE
На самом деле мне кажется, что я могу сохранить положение прокрутки GetScrollPos(), а затем SetScrollPos(), чтобы восстановить его, однако он буквально просто устанавливает положение полосы прокрутки и фактически не прокручивает элементы моего CListCtrl.
ОБНОВЛЕНИЕ 2
Метод Scroll(), кажется, правильно прокручивает полосы прокрутки и содержимое. Однако в качестве аргумента требуется объект CSize. Поэтому вопрос заключается в том, как перевести между CSize и выходом GetTopIndex или GetScrollInfo/Pos.
Ответы
Ответ 1
Я делал это в прошлом. IIRC, трюк состоял в:
int topIndex= m_List.GetTopIndex();
RenewContents();
m_List.EnsureVisible(m_List.GetItemCount() - 1); // Scroll down to the bottom
m_List.EnsureVisible(topIndex);// scroll back up just enough to show said item on top