Есть такой мессаж - LVM_GETTOPINDEX. Здорово, вот только нет LVM_SETTOPINDEX Как в ListView установить позицию скроллеров? Смысл в том, что я по таймеру обновляю ListView путем удаления всех итемов и заполнения листа заново. А вот как восстановить позицию просмотра?
Попробуй послать WM_VSCROLL с кодом SB_THUMBTRACK и нужной позицией: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shell cc/platform/commctls/scrollbars/scrollbarreference/scrollbarmessages/w m_vscroll.asp
AsmGuru62 q_q И еще одна проблемма: LVM_GETTOPINDEX возвращает значение следующим образом: Код (Text): Индекс на самом деле: ListView_GetTopIndex(hList) 0 ------------------------ 0 1 ------------------------ 0 2 ------------------------ 1 3 ------------------------ 2 4 ------------------------ 3 5 ------------------------ 4 ........................ n ------------------------ n-1 Тут-то как быть?
_DEN_ Ты хочешь сказать, что если первой видимой будет вторая строка ListView'а, то LVM_GETTOPINDEX вернет ноль? Может быть твой ListView в режиме icon или small icon?
q_q Может быть твой ListView в режиме icon или small icon? LVS_REPORT Все, понял. Опять я поспешил. Работает странно не ListView_GetTopIndex. Странно работает ListView_Scroll. Вот такой прикол: Код (Text): ListView_Scroll На сколько проскролится 0 ----------------- 0 10 ----------------- 10 20 ----------------- 10 30 ----------------- 20 40 ----------------- 30 ................. 10*n --------------- 10*(n-1) Поставив такую заглушку все заработало: Код (Text): int top=ListView_GetTopIndex(hList); Clear(); Fill(); ListView_Scroll(hList,0,10*(top+(top>1)))); Вот только все же, как по-человечески восстанавливать позицию? Ведь еще и горизонтальный скролл не хотелось бы терять. Правка: Блин, он еще глючит, если до последней записи добраться. Еще одна заглушка нужна... Как же TaskManager работает? Там все красиво и аккуратно, кроме моргания.