Обновление ListView

Тема в разделе "WASM.WIN32", создана пользователем _DEN_, 12 янв 2005.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Есть такой мессаж - LVM_GETTOPINDEX. Здорово, вот только нет LVM_SETTOPINDEX :dntknw: Как в ListView установить позицию скроллеров? Смысл в том, что я по таймеру обновляю ListView путем удаления всех итемов и заполнения листа заново. А вот как восстановить позицию просмотра?
     
  2. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
  3. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    _DEN_

    LVM_ENSUREVISIBLE?
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    AsmGuru62

    q_q

    И еще одна проблемма: LVM_GETTOPINDEX возвращает значение следующим образом:
    Код (Text):
    1.  
    2. Индекс на самом деле:      ListView_GetTopIndex(hList)
    3. 0 ------------------------ 0
    4. 1 ------------------------ 0
    5. 2 ------------------------ 1
    6. 3 ------------------------ 2
    7. 4 ------------------------ 3
    8. 5 ------------------------ 4
    9.   ........................
    10. n ------------------------ n-1
    11.  


    Тут-то как быть?
     
  5. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    _DEN_

    Ты хочешь сказать, что если первой видимой будет вторая строка ListView'а, то LVM_GETTOPINDEX вернет ноль?



    Может быть твой ListView в режиме icon или small icon?
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    q_q

    Может быть твой ListView в режиме icon или small icon?



    LVS_REPORT



    Все, понял. Опять я поспешил. Работает странно не ListView_GetTopIndex. Странно работает ListView_Scroll. Вот такой прикол:
    Код (Text):
    1.  
    2. ListView_Scroll      На сколько проскролится
    3.  0 -----------------  0
    4. 10 ----------------- 10
    5. 20 ----------------- 10
    6. 30 ----------------- 20
    7. 40 ----------------- 30
    8.    .................
    9. 10*n --------------- 10*(n-1)


    Поставив такую заглушку все заработало:
    Код (Text):
    1.  
    2. int top=ListView_GetTopIndex(hList);
    3. Clear();
    4. Fill();
    5. ListView_Scroll(hList,0,10*(top+(top>1))));


    Вот только все же, как по-человечески восстанавливать позицию? Ведь еще и горизонтальный скролл не хотелось бы терять.



    Правка:



    Блин, он еще глючит, если до последней записи добраться. Еще одна заглушка нужна... Как же TaskManager работает? Там все красиво и аккуратно, кроме моргания.