LVS_SORTASCENDING в ListView

Тема в разделе "WASM.BEGINNERS", создана пользователем HeadHunter, 4 сен 2009.

  1. HeadHunter

    HeadHunter New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2009
    Сообщения:
    30
    Просто задолбался с этим стилем. Код самый стандартный:

    Код (Text):
    1.               invoke  SendMessage, [hListView], LVM_GETITEMCOUNT, 0, 0
    2. ;              xor     eax, eax
    3.  
    4.               @@:
    5.               mov     ecx, [ulParam]
    6.  
    7.               mov     [_LVITEM.mask], LVIF_TEXT + LVIF_PARAM
    8.               mov     [_LVITEM.cchTextMax], 128
    9.               mov     [_LVITEM.iItem], eax
    10.               mov     [_LVITEM.iSubItem], 0
    11.               mov     [_LVITEM.pszText], Text
    12.               mov     [_LVITEM.lParam], ecx
    13.               invoke  SendMessage, [hListView], LVM_INSERTITEM, 0, _LVITEM
    В общем всё делал по MSDN, всё прекрасно работает, но стоит добавить этот долбаный LVS_SORTASCENDING, как всё становится наперекосяк. В частности при обработке (обновлении\удалении\создании) элементов, пропадают под-элементы (subitem) и перестает сохранятся выделение на выбранной позиции. Если же вместо LVM_GETITEMCOUNT, просто обнулять индекс элемента при каждой вставке, то всё встаёт на свои места, но перестаёт работать сортировка. Походил по разным форумам, в гугле смотрел, ответа не нашёл. Что не так в коде, что нужно изменить что бы заработала сортировка?

    Есть подозрение, что проблема как то связана с lParam, но мне нужен он, к тому же судя по MSDN там хранятся только пользовательские данные.
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
  3. HeadHunter

    HeadHunter New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2009
    Сообщения:
    30
    Не работает. Никакой разницы что я использую LVM_SETITEM или LVM_SETITEMTEXT, один и тот же эффект в обоих случаях. Но стоит мне убрать lParam, как всё встаёт на свои места (сортировка при этом перестает работать). Только вот у меня зацепка на lParam, я узнаю таким образом какой элемент мне удалить.

    Пишется про какой то LPSTR_TEXTCALLBACK, у меня нет никакого LPSTR_TEXTCALLBACK, ссылка там на текст который нужно вставить.
     
  4. HeadHunter

    HeadHunter New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2009
    Сообщения:
    30
    Сейчас вообще добился того, что стабильно работает независимо от присутствия стиля LVS_SORTASCENDING, сортировка при этом не работает при любом раскладе.