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