CListCtrl: Как сохранить позицию прокрутки? - PullRequest
10 голосов
/ 30 сентября 2011

У меня есть CListCtrl (стиль отчета), где я очищаю список и заполняю его в определенные моменты времени.Я хотел бы сохранить положение вертикальной прокрутки при этом.Я вижу, что есть пара методов, которые выглядят многообещающими:

EnsureVisible()
GetScrollPos()
SetScrollPos()
GetScrollInfo()
GetTopIndex()
Scroll()

Я пытаюсь использовать GetScrollPos (), а затем SetScrollPos (), но, похоже, он не работает.Каков простой правильный способ сохранить позицию прокрутки, а затем восстановить ее?

ОБНОВЛЕНИЕ

На самом деле, кажется, я могу сохранить положение прокрутки GetScrollPos ()а затем SetScrollPos (), чтобы восстановить его, однако буквально кажется, что он устанавливает положение полосы прокрутки и фактически не прокручивает элементы моего CListCtrl.* Метод Scroll (), кажется, правильно прокручивает полосы прокрутки и содержимого.Однако он принимает объект CSize в качестве аргумента.Поэтому вопрос заключается в том, как выполнить перевод между CSize и выводом либо GetTopIndex, либо GetScrollInfo / Pos.

1 Ответ

17 голосов
/ 30 сентября 2011

Я делал это в прошлом.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
...