LVN_GETDISPINFO

Тема в разделе "WASM.WIN32", создана пользователем _evil, 15 авг 2004.

  1. _evil

    _evil Member

    Публикаций:
    0
    Регистрация:
    28 сен 2003
    Сообщения:
    61
    Иногда в "SysListView32" много строк, и имеет смысл вставлять иконки только для видимой (в данный момент) части листа (через сообщение LVN_GETDISPINFO). Но как сделать так чтобы начало показывались строки а потом (когда все видимые строки появились) вставить иконки.
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    _evil



    имеет смысл вставлять иконки только для видимой (в данный момент) части



    говорит о том, что LVS_OWNERDATA не установлен. Если это так, то LVN_GETDISPINFO не придёт.

    Установи LVS_OWNERDATA и заблокируй обработку запроса с маской LVIF_IMAGE до прихода и обработки запросов с маской LVIF_TEXT для всех видимых итемов (и субитемов).
     
  3. _evil

    _evil Member

    Публикаций:
    0
    Регистрация:
    28 сен 2003
    Сообщения:
    61
    ещё один вопрос, пожалуйста – SHGetFileInfo даёт индекс иконки (из SYS – листа ) но очень медленно а Internet Explorer(проводник) быстрее каким макаром ?
     
  4. _evil

    _evil Member

    Публикаций:
    0
    Регистрация:
    28 сен 2003
    Сообщения:
    61
    Что за прикол делаю "SysListView32" с флагом LVS_OWNERDATA всё виснет .

    Хотя без него контрол шлет родителю LVN_GETDISPINFO через WM_NOTIFY и если его обработать то он нормально вставляет (LVN_GETDISPINFO pnmv = (LV_DISPINFO FAR *) lParam;)



    “заблокируй обработку запроса с маской LVIF_IMAGE” – можно по подробней
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    Странно как-то, у меня не шлёт LVN_GETDISPINFO без LVS_OWNERDATA. Насколько я понимаю, LVN_GETDISPINFO посылается только virtual listview, хотя может я и ошибаюсь.





    Предполагалось, что у тебя virtual listview, и от него можно было получить через сообщение LVN_ODCACHEHINT номера, которые будут перерисовываться (с какого по какой итем), запоминать эти два номера (в структуре NMLVCACHEHINT - iFrom и iTo) и пока для итемов с номерами от iFrom до iTo не пройдут запросы текста (LVIF_TEXT) через LVN_GETDISPINFO и не заполнены для них .item.pszText, обработку запроса с маской LVIF_IMAGE пропускать. Тогда и появлялись бы сначала строки, а затем уже иконки.

    Но раз у тебя не virtual, то iFrom и iTo не получишь.

    Что касается SHGetFileInfo и explorer'a, возможно explorer пользуется другими источниками, а не SHGetFileInfo. Мож в реестре где смотрит.
     
  6. _evil

    _evil Member

    Публикаций:
    0
    Регистрация:
    28 сен 2003
    Сообщения:
    61
    Спасибо ты меня просветила !!!

    а сообщение LVN_GETDISPINFO у меня приходило наверно из за индекса иконки == I_IMAGECALLBACK;