Список может быть отсортирован, если у него установлен флаг сортировки и перегружена функция 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;
Список станет таким:
ЯПОНИЯ
США
РОССИЯ
КАНАДА
А вообще-то условия можно давать и значительно сложнее. Например, сортировать по площади, которую можно брать из базы данных.