Aleexeey
Постоялец
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++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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
Постоялец
Offline
|
|
« Ответ #2 : 17-07-2008 15:03 » |
|
Спасибо Джон за отклик, значит у меня еще не получается и файл загрузить!? Попробую еще раз! Callback функцию писал. Она получает только третий параметр "lParamSort". Остальные CONST = ноль.
|
|
« Последнее редактирование: 18-07-2008 17:07 от Алексей1153++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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
Постоялец
Offline
|
|
« Ответ #4 : 17-07-2008 15:06 » |
|
Выложил по English.
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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."
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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."
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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."
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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
Постоялец
Offline
|
|
« Ответ #9 : 17-07-2008 15:32 » |
|
У меня Visual Studio 2005 Professional Edition Version 8.0, мож что с ним проблема? А может настройки ресурсов остались мои (типа директорий) - если ресурсы компильнуть, а?
- ну это уже я опоздал написать.
Щас попробую!
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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
Постоялец
Offline
|
|
« Ответ #11 : 17-07-2008 16:02 » |
|
Функцию сделал глобальной - все также!? How To Sort Items in a CListCtrl in Report View - просмотрел, вроде (почти) также.
в общем, мож алгоритм и лучше, но pData1 или pData2 из за очередных, досадных, ... нолей прописывает NULL! На скриншоте видно.
|
|
|
Записан
|
|
|
|
Malaja
|
|
« Ответ #12 : 18-07-2008 11:04 » |
|
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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
|
|
« Ответ #14 : 18-07-2008 11:56 » |
|
Джон, у меня нет студии 2005... А в 2003-ю проектик загружаться отказывается по идейным соображениям ;-( Aleexeey, предыдущий линк, который я назвала, забудь как страшный сон - оно не работает Зато посмотри сюда - работает прекрасно (там есть пример из программерской библии - мсдн-а ) И главное (опять же я проверила на примере) - заполнять контрол с помощью SetItemData(). Линк: http://forum.ixbt.com/topic.cgi?id=40:1854
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Malaja
|
|
« Ответ #15 : 18-07-2008 12:11 » |
|
пардон, отправила незаконченное сообщение... И еще - тебе надо в ListView_SortItems передавать сам контрол. Пример сделан для МФЦ, но перегнать все это в апи не должно составить труда (просто те функции, которые ты используешь, я не знаю, поэтому переделать сама не могу).
У меня был контрол с 2-мя столбцами (типа String), сортировка проводится правильно по любому из столбцов.
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Aleexeey
Постоялец
Offline
|
|
« Ответ #16 : 18-07-2008 12:16 » |
|
Malaja я уже пересмотрел первый линк, кстати, спасибо за него, у них того же рода ошибка! Но и там отвечали "сухо", так парень и остался с носом. Извиняюсь если грубо (про парня). Щас посмотрим второй линк!
|
|
« Последнее редактирование: 18-07-2008 12:36 от Aleexeey »
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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
Постоялец
Offline
|
|
« Ответ #18 : 18-07-2008 12:30 » |
|
Можно тоже вопросик не в тему (аналогично), а почему на MFC? Незнаю, просто нравится программировать таким стилем, а MFC не пробовал (он на Delphi похож). А на каком: АПИ или МФЦ писать профессиональнее? На MFC с нуля начинать придется.
|
|
« Последнее редактирование: 18-07-2008 12:45 от Aleexeey »
|
Записан
|
|
|
|
Malaja
|
|
« Ответ #19 : 18-07-2008 12:47 » |
|
Джон, я через студию попыталась загрузить vcproj, а она меня послал... Видимо, ей облом в пятницу работать Aleexeey, Иногда бывают ситуации, где нужен апи (хотя я с такими в реальности не сталкивалась - повезло мне ). А в обычной жизни МФЦ просто удобней - есть готовые классы, которые реализуют те же апи-функции, но это все как-то читабельней и удобней (это мое мнение).
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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
Постоялец
Offline
|
|
« Ответ #21 : 18-07-2008 13:20 » |
|
Просмотрел второй линк Malaja, спасибо за линк. Э-э-х уговорили, удаляйте тему (в шутку), заявляю что перехожу на MFC!
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #22 : 18-07-2008 13:26 » |
|
Вот тебе для затравки. Твоя задача с кодом по линку и экзешником для теста. Время исполнения... <5 мин. Если присмотреться, то основное время ушло бы на набор данных и логику ф-ции сортировки. Поэтому я их безжалостно передрал.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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
Постоялец
Offline
|
|
« Ответ #23 : 18-07-2008 14:03 » |
|
Спасибо! Джон! а твой проект у меня запустился, и все работает!
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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."
|
|
|
|