2016-06-01 1 views
-1

Как я могу сортировать элементы в CListCtrl при нажатии кнопки?Как я могу сортировать элементы в `CListCtrl` при нажатии кнопки?

Я сделал приложение на основе диалога в MFC.

Я положил CListCtrl на мой диалог и установил его стиль представления для типа отчета. У меня есть два столбца в этом списке.

Здесь, когда я нажал кнопку "Sorting", он должен сортировать элемент в списке. Я видел много примеров, связанных с этим, но никто не работает для меня.

Может ли кто-нибудь посоветовать мне, как это сделать?

+0

Какой код вы пробовали? Что не работает с этой реализацией? Как мы должны давать вам предложения с предоставленной вами информацией? –

+0

http://blog.naver.com/ddaidock/40072648779 –

+0

В этом коде я должен щелкнуть по столбцу. Но этого я не хочу. Как я могу запустить функцию OnColumnclickList1(), когда я нажимаю кнопку «Сортировка». –

ответ

1

Я предполагаю, что вы имеете в виду заголовок столбца, когда вы пишете «кнопку сортировки».

Вы, наверное, забыли поставить это в карту сообщений диалогового окна вашего:

ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnColumnclickList1) 

IDC_LIST1 является идентификатором управления списком, который может отличаться в вашем коде.

Вы знакомы с MFC? Если нет, вы должны следовать одному из многочисленных руководств, доступных в сети.

+0

Спасибо за ваш ответ. Я узнал от тебя что-то новое. Но я имею в виду, что я хочу автоматически сортировать элементы в CListCtrl без каких-либо операций, таких как OnLvnColumnclickList(). –

+0

@ hitman.star вы не можете. Вы должны написать код, но в ссылке, приведенной в одном из ваших комментариев, метод «OnColumnclickList1» более или менее то, что вам нужно. –

+0

@ hitman.star вы _really_ должны следовать учебнику MFC. –

1

Я бы использовал CMFCListCtrl. Это проще, поскольку он построен в функции сортировки, и вам нужно только предоставить функцию с помощью алгоритма сравнения элементов для сортировки. Мне это удалось. Вы должны переопределить OnCompareItems на свой класс, полученный от CMFCListCtrl. Я также рекомендую вам позвонить по телефону EnableMarkSortedColumn(); после создания списка.

+0

Спасибо, но не могли бы вы объяснить, как вам это удалось? –

+0

Я не знаю, используете ли вы пользовательский класс от себя или непосредственно от CListCtrl. В первом случае изменение вашего класса, которое должно быть выведено из 'CFMCListCtrl', не должно быть затруднительным, так как' CMFCListCtrl' является прямым дочерним элементом 'CListCtrl'. – sergiol

0

CListCtrl имеет метод SortItems.

Все, что вам нужно сделать, это предоставить . Сравните функцию с ней как с параметром.

Я не знаю много о содержании вашего контроля списка, поэтому я не могу дать вам больше информации.

Просьба ознакомиться с ним и расширить свой вопрос с помощью примера кода и деталей, которые необходимо отсортировать, и я могу помочь больше.

Если содержимое ваших клеток просто текст, то я обычно просто возвращает значение:

return Value1.CollateNoCase(Value2); 

Есть также много учебников в Интернете. Например:

http://www.codeproject.com/Articles/27774/CListCtrl-and-sorting-rows

В самом деле, что учебник предлагает нам в SortItemsEx. Это то, что я буду использовать.