由於在CListCtrl 做排序的時候遇到一些問題,索性不照正統作法來解決,直接在每個使用CListCtrl的地方各自增加所要的排列方式。
1.宣告 ClistCtrl * m_ListDemo;
2.取得新增ClistCtrl物件的位址:
m_ListDemo = (CListCtrl*)GetDlgItem(IDC_LIST_DEMO);
3.增加CallBack Function 給 SortItems()來使用:
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CListCtrl *pList=(CListCtrl *)lParamSort;
LVFINDINFO findInfo;
findInfo.flags = LVFI_PARAM;
findInfo.lParam = lParam1;
int iItem1 = pList->FindItem(&findInfo, -1);
findInfo.lParam = lParam2;
int iItem2 = pList->FindItem(&findInfo, -1);
CString strItem1 = pList->GetItemText(iItem1,isub);
CString strItem2 = pList->GetItemText(iItem2,isub);
return strcmp(strItem2, strItem1);
}
4.設定List的header和增加Item:
m_ListDemo->SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
m_ListDemo->InsertColumn(0,"Name",LVCFMT_LEFT,100);
m_ListDemo->InsertColumn(1,"Age",LVCFMT_LEFT,100);
m_ListDemo->InsertColumn(2,"Score",LVCFMT_LEFT,100);
m_ListDemo->InsertItem(0,"XXX",0);
m_ListDemo->SetItemText(0,1,"25");
m_ListDemo->SetItemText(0,2,"99");
m_ListDemo->InsertItem(1,"OOO",0);
m_ListDemo->SetItemText(1,1,"26");
m_ListDemo->SetItemText(1,2,"80");
//如果要用SortItems做排序,此ItemData必須設定。
m_ListDemo->SetItemData(0, 0);
m_ListDemo->SetItemData(1, 1);
5.執行CListCtrl Class中的SortItems():
m_ListDemo->SortItems(CompareFunc, m_ListDemo);