Автор
|
Тема: Сортировка списка
|
spectator |
опубликован 14-12-2001 11:55 MSK
Помогите пожалуйста, cписок не могу отсортировать. Делаю примерно следующее:void CMyListView::PopulateList() { СListCtrl& ctlList = (CListCtrl&) GetListCtrl(); ... //заполняю список ... ctlList.SortItems(ListItemCompare,(LPARAM)&ctlList); } static int CALLBACK ListItemCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { CListCtrl* pListCtrl = (CListCtrl*) lParamSort; CString strItem1 = pListCtrl->GetItemText(lParam1, 0); CString strItem2 = pListCtrl->GetItemText(lParam2, 0); return strcmp(strItem1, strItem2); } Но список не сортируется. :( Что я не так делаю?
|
purpe
|
опубликован 14-12-2001 00:36 MSK
попробуй использовать принцип из: http://www.cpp.atfreeweb.com/CListCtrl/SortListCtrl.html
|
purpe
|
опубликован 14-12-2001 00:43 MSK
упс, ты ж по буквам сортируешь ?чего-то я никак не могу въехать, каков выходной результат strcmp :)
|
purpe
|
опубликован 14-12-2001 00:50 MSK
так может тебе просто установить у списка свойство сортировки ? Даже в редакторе ресурсов есть "Sort: Ascending".А то везде сказано, что сортировка в списках по алфавиту производится при помощи установки свойства, а по числам надо делать вручную ...
|
spectator
|
опубликован 14-12-2001 13:30 MSK
Я использую CListView, а не CListCtrl. //class CMyListView: public CListViewМожет я ошибаюсь, но в таком случае в ресурсах ничего поправить не удастся. В MSDN есть пример сортировки СListCtrl,но там при вызове ctlList.SortItems(ListItemCompare,(LPARAM)&ctlList) в качестве второго параметра передается указатель, а ссылка- может в этом дело? Но я всё-равно так сделать не могу =>(СListCtrl& ctlList = (CListCtrl&) GetListCtrl();) |
Heromantor
|
опубликован 14-12-2001 14:44 MSK
Хехе как всех дядя Билли на%$%$ ;))))))))))))В ф-цию сортировки в lParam1 и lParam2 передаеться не индексы сравниваемых эл-тов а то что ты занес(или не занес) в ItemData(SetItemData()), так вот шоб это все работало надо перед вызовом сортировки сделать что-то типа того: for(int i=0;i<LIST->GetItemCount();i++)LIST->SetItemData(i,i) а потом уже SortItems() вызывать. Так что если че-нить хранишь в этой переменной то придеться извращаться ;))). |
spectator
|
опубликован 15-12-2001 06:32 MSK
Спасибо большое, заработало %D. Хотя повезло, что ItemData для других целей мне _пока_ не нужна ... |