Список может быть отсортирован, если у него установлен флаг сортировки и перегружена функция CompareItem().
int CTestList::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct) { // TODO: Add your code to determine the sorting order of the specified items // return -1 = item 1 sorts before item 2 // return 0 = item 1 and item 2 sort the same // return 1 = item 1 sorts after item 2 return 0; }
Если ставите sort, то перегружайте функцию, иначе получите сообщение об ошибке в ходе выполнения. Главное, что передается в этот список - это структура COMPAREITEMSTRUCT.
typedef struct tagCOMPAREITEMSTRUCT { UINT CtlType; UINT CtlID; HWND hwndItem; UINT itemID1; // индекс первого элемента в списке DWORD itemData1; // данные первого элемента UINT itemID2; // индекс второго сравниваемого элемента DWORD itemData2; // данные второго сравниваемого элемента } COMPAREITEMSTRUCT;
Давайте попробуем отсортировать наш список стран по первой букве:
int CTestList::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct) { CString s1=(LPSTR)lpCompareItemStruct->itemData1; CString s2=(LPSTR)lpCompareItemStruct->temData2; char c1=s1[0]; char c2=s2[0]; if (c1>=c2) return 1; else return -1; }
В обратном порядке будет наоборот:
if (c1<c2) return 1; else return -1;
Список станет таким:
ЯПОНИЯ США РОССИЯ КАНАДА
А вообще-то условия можно давать и значительно сложнее. Например, сортировать по площади, которую можно брать из базы данных.