Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Сортировка по столбцам ListView  (Прочитано 32863 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aleexeey
Постоялец

ru
Offline Offline

« : 17-07-2008 13:57 » 

Привет всем!

Столкнулся я с нелепой проблемой, может и ступил где, но ни как не могу заставить элемент ListView сортировать строки.

щелкая по шапке ListView, получаю событие LVN_COLUMNCLICK, далее вызываю API-функцию ListView_SortItems.
Сообщение передается в функцию алгоритма с параметрами: LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort.

И вот lParam1 и lParam2 всегда имеют нулевое значение!  Не понял
Из-за чего алгоритм сравнения всегда сравнивает только первую строку!?

Просмотрел в инете всякие примеры, но не один не заработал должным образом!  А черт его знает...

Помогите пожалуйста, люди добрые!!!
Очень надеюсь на Вас!!!  Да-да

Проект приложил, (так лучше, наверно, увидеть ошибки).

Благодарю ВАС заранее!!!
« Последнее редактирование: 18-07-2008 17:06 от Алексей1153++ » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 17-07-2008 14:52 » 

404 - Вложение не найдено. Жаль

Поэтому вслепую. Ща точно не помню, но я такое делал, всё работало. Там надо передавать Callback ф-ю, которую ты должен сам написать. В ней сортируешь строки как надо. Если ты это уже делаешь, То кидай проект на мыло либо покажи тут код, я прицеп не могу сгрузить. Жаль
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Aleexeey
Постоялец

ru
Offline Offline

« Ответ #2 : 17-07-2008 15:03 » 

Спасибо Джон за отклик, значит у меня еще не получается и файл загрузить!?
Попробую еще раз!
Callback функцию писал. Она получает только третий параметр "lParamSort".
Остальные CONST = ноль.  Не понял
« Последнее редактирование: 18-07-2008 17:07 от Алексей1153++ » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 17-07-2008 15:04 » 

Нифига не работает. Ты попробуй его аглицкими буквами назови.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Aleexeey
Постоялец

ru
Offline Offline

« Ответ #4 : 17-07-2008 15:06 » 

Выложил по English.

* Project.rar (5.1 Кб - загружено 1091 раз.)
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 17-07-2008 15:16 » 

О, другое дело
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 17-07-2008 15:21 » 

Блииин, попадалово. Чистый АПИ. Я такое на MFC делал. А твой проект у меня даже не запускается.

DialogMenu::CreateDlg(HINSTANCE hinst) возвращает сразу -1 и на этом всё благополучно заканчивается... Жаль
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 17-07-2008 15:24 » 

попробуй ListViewCompareProc сделать глобальной. Она ведь у тебя с членами  класса не работает.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 17-07-2008 15:31 » 

Типа (пример взят из MFC, но данная ф-я может и без него рабоать):

Код:
int CALLBACK SortFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
int nRetVal;

PITEMDATA pData1 = (PITEMDATA)lParam1;
PITEMDATA pData2 = (PITEMDATA)lParam2;


switch(lParamSort)
{
case 0: // Last Name
nRetVal = strcmp(pData1->pszLastName,
                                 pData2->pszLastName);
break;

case 1: // First Name
nRetVal = strcmp(pData1->pszFirstName,
                                 pData2->pszFirstName);
break;

case 2: // Term
nRetVal = strcmp(pData1->pszTerm, pData2->pszTerm);
break;

default:
break;
}

return nRetVal;
}
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Aleexeey
Постоялец

ru
Offline Offline

« Ответ #9 : 17-07-2008 15:32 » 

У меня Visual Studio 2005 Professional Edition Version 8.0, мож что с ним проблема?
А может настройки ресурсов остались мои (типа директорий) - если ресурсы компильнуть, а?

- ну это уже я опоздал написать.

Щас попробую!
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 17-07-2008 15:34 » 

Фиг его знает, ща нет времени с этим разбираться. Попробуй, а там посмотрим.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Aleexeey
Постоялец

ru
Offline Offline

« Ответ #11 : 17-07-2008 16:02 » 

Функцию сделал глобальной - все также!?
How To Sort Items in a CListCtrl in Report View - просмотрел, вроде (почти) также.

в общем, мож алгоритм и лучше, но pData1 или pData2
из за очередных, досадных, ... нолей прописывает NULL!
На скриншоте видно.

* Error.JPG (18.76 Кб - загружено 1110 раз.)
Записан
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #12 : 18-07-2008 11:04 » 

Aleexeey,

посмотри http://forum.sources.ru/index.php?showtopic=97001&view=showall
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #13 : 18-07-2008 11:25 » 

Ир, а у тебя получилось проект запустить? Эезешник у меня компилится, только после старта сразу заканчивается...
Ресурсы внутри. Всё в порядке. Только не работает.

Aleexeey, может у тебя что-то с инициаллизацией (передачей необходимых параметров в ListView_SortItems) не в порядке? Поэтому она тебе нулевые айтемы и возвращает. Тупой вопрос, а список у тебя в этот момент заполнен?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #14 : 18-07-2008 11:56 » 

Джон,

у меня нет студии 2005... А в 2003-ю проектик загружаться отказывается по идейным соображениям ;-(

Aleexeey,
предыдущий линк, который я назвала, забудь как страшный сон - оно не работает Ага
Зато посмотри сюда - работает прекрасно (там есть пример из программерской библии - мсдн-а Ага )
И главное (опять же я проверила на примере) - заполнять контрол с помощью SetItemData().
Линк:
http://forum.ixbt.com/topic.cgi?id=40:1854
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #15 : 18-07-2008 12:11 » 

пардон, отправила незаконченное сообщение...
И еще - тебе надо в ListView_SortItems передавать сам контрол.
Пример сделан для МФЦ, но перегнать все это в апи не должно составить труда (просто те функции, которые ты используешь, я не знаю, поэтому переделать сама не могу).

У меня был контрол с 2-мя столбцами (типа String), сортировка проводится правильно по любому из столбцов.
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Aleexeey
Постоялец

ru
Offline Offline

« Ответ #16 : 18-07-2008 12:16 » 

Malaja я уже пересмотрел первый линк, кстати, спасибо за него, у них того же рода ошибка!  Улыбаюсь
Но и там отвечали "сухо", так парень и остался с носом. Извиняюсь если грубо (про парня).

Щас посмотрим второй линк!  Да-да
« Последнее редактирование: 18-07-2008 12:36 от Aleexeey » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #17 : 18-07-2008 12:21 » 

Ир, а я в 2003 компилил. Просто проект открыл через селектор студий, он сам 2003 запустил.

Aleexeey, вопрос не в тему, а почему чистый АПИ?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Aleexeey
Постоялец

ru
Offline Offline

« Ответ #18 : 18-07-2008 12:30 » 

Можно тоже вопросик не в тему (аналогично), а почему на MFC?  Ага
Незнаю, просто нравится программировать таким стилем, а MFC не пробовал (он на Delphi похож).

А на каком: АПИ или МФЦ писать профессиональнее?
На MFC с нуля начинать придется.  Ага
« Последнее редактирование: 18-07-2008 12:45 от Aleexeey » Записан
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #19 : 18-07-2008 12:47 » 

Джон,

я через студию попыталась загрузить vcproj, а она меня послал... Видимо, ей облом в пятницу работать Ага

Aleexeey,
Иногда бывают ситуации, где нужен апи (хотя я с такими в реальности не сталкивалась - повезло мне Ага ). А в обычной жизни МФЦ просто удобней - есть готовые классы, которые реализуют те же апи-функции, но это все как-то читабельней и удобней (это мое мнение).
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #20 : 18-07-2008 13:12 » 

Aleexeey, MFC это просто ООП враппер для АПИ. Посмотри на форуме уже много раз было. На наём просто удобней. Куча мелочей, которые в АПИ приходится делать ручками в нём спрятаны в оболочку и для программера прозрачны. Сравни свой код с кодом примера по линку, который я давал. Использование MFC не исключает использование АПИ. Можешь и дальше им пользоваться.

Что профессиональней... Тут тебя ща завалят с обоих сторон про и контра аргументами и обе стороны будут правы. Ага

Я могу сказать только одно, что MFC даёт тебе преимущества ООП при работе с АПИ. Конечно это не панацея на ВСЕ случаи жизни. Поэтому каждый выбирает сам для себя. Я программлю на MFC с 1999 года. Пока ещё ни разу не было такой ситуации, чтобы я что-то не смог сделать, только по вине MFC. Но это лично мой опыт. У кого-то он другой.

Для данной задачи проще (и быстрее) использовать MFC.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Aleexeey
Постоялец

ru
Offline Offline

« Ответ #21 : 18-07-2008 13:20 » 

Просмотрел второй линк Malaja, спасибо за линк.  Улыбаюсь

Э-э-х уговорили, удаляйте тему (в шутку), заявляю  Для глухих что перехожу на MFC!  Внимание! Говорит и показывает...
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #22 : 18-07-2008 13:26 » 

Вот тебе для затравки. Твоя задача с кодом по линку и экзешником для теста. Время исполнения... <5 мин.

Если присмотреться, то основное время ушло бы на набор данных и логику ф-ции сортировки. Поэтому я их безжалостно передрал. Ага

* SortListTest.zip (127.59 Кб - загружено 1136 раз.)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Aleexeey
Постоялец

ru
Offline Offline

« Ответ #23 : 18-07-2008 14:03 » 

Спасибо! Джон!  Улыбаюсь
а твой проект у меня запустился, и все работает!  Да-да
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #24 : 18-07-2008 14:15 » 

Дык да не за что. Я ж ничего не сделал.

Я ж тебе с солюшн дал. А может потому, что я твой под 2003 компилил. Хотя по идее какая разница? Ну да ладно, как я уже сказал, разбираться с этим всё-равно нет времени.

Ну и ещё одно напутствие, раз уж ты собрался переходить на MFC, АПИ нужно знать - это основа. Если будешь знать АПИ, то и на MFC будешь хорошо программить. Многие начинают с MFC, а потом требуют от него то, для чего он не предназначен. Исходники MFC полностью выложены и ты всегда можешь посмотреть как работает та или иная ф-я. В конечном счёте всё сводится к вызову всё тех же АПИ ф-ций.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines