| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > ListView сортировка |
| Автор: neosapient 23.1.2008, 19:09 | ||
| Вопрос: как отсортировать поля в ListView. В приложении мой пример, не могу понять что не работает? Помогите найти ошибку. Диагноз такой, когда человек щелкает по шапке столбца, то начинает вызываться моя функция сравнения ListSort(...) Последний параметр воспринимаю бес проблем. А вот в два других ничего не передается. Почему? немогу понять...
|
| Автор: Earnest 23.1.2008, 19:55 | ||
Что положил в итемы, то и передается... А ты, насколько я вижу, ничего туда не положил... |
| Автор: neosapient 24.1.2008, 12:01 | ||||
| Я ни на английском, ни на русском не могу понять алгоритма мох действий по продготовке и проведению поиска. У меня в голове лежит следующий стериотип. Я вызываю макрос
В первый параметр передаю хендл ListView Во второй параметр указатель на функцию сравнения двух элементов. В третий параметр - четырехбайтное значение, которое будет передано моей функции, в моем случае это указатель на структуру. Управление берет на себя винда. Она по какому то алгоритму (думаю qsort) начинает попарное сравнение, всех элементов. Далее сортировка. Выбираются два элемента, и передаются в функцию сравнения (вместе с третим, в котором управляющие параметры передаем себе)
Я не понимаю на каком шаге и где, мною что то кладется? Хотелось бы рабочий пример или этот подправить. |
| Автор: Earnest 24.1.2008, 12:20 |
| lParam1 и 2 это lParam из элемента лист-вью (из структуры LVITEM), который ты туда помещаешь (можешь поместить) в момент наполнения лист-вью. Пример сейчас не найду, но помню, что была тема про сортировку в лист вью, поищи. |
| Автор: neosapient 24.1.2008, 14:40 |
| Вроде разобрался. Помещаю на момент заполнения ListView в переменную LVITEM::lParam свои значения (уменя отличные от нуля - соответствующие пересчету) и добавляю флаг LVITEM::mask |= LVIF_PARAM. затем в функции сравнения получаю входные LVITEM::lParam Начало сортировать ) Вот только второй столбец исчез когда я сменил стиль на LVITEM::mask |= LVIF_PARAM. Как исправить это недоразумение? ) |
| Автор: neosapient 24.1.2008, 15:33 | ||
| Вроде разобрался Рабочий вариант
Для ListView есть ещё макросы ListView_SortItemsEx и ListView_SortGroups Чем эти сортиовки отличаются? |