函数原型
BOOL SortItems(PFNLVCOMPARE pfnCompare,DWORD_PTR dwData);
PFNLVCOMPARE 是一个函数指针类型
PFNLVCOMPARE 原型int CALLBACK (*pFun)(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
lParam1 , lParam表示比较的Item, 也就是ClistCtrl的第几行数据
lParamSort ClistCtrl类型的指针
dwData 将成为pfnCompare的第三个参数,也就是lParamSort;
下面一段代码实现的是按第一列排序, 如果第一列的值相同则按第二列排序
1.定义PFNLVCOMPARE 函数
int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
int row1 = (int)lParam1;
int row2 = (int)lParam2;
CListCtrl* lc = (CListCtrl*)lParamSort;
CString str1 = lc->GetItemText(row1, 0);
CString str2 = lc->GetItemText(row2, 0);
int nRes = lstrcmp(str1, str2);
if (0 == nRes)
{
str1 = lc->GetItemText(row1, 1);
str2 = lc->GetItemText(row2, 1);
nRes = lstrcmp(str1, str2);
}
return nRes;
}
2.在点击listctrl第一列时 条用SortItems();
void CLtListCtrl::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
SortItems(ListCompare, (LPARAM)this);
*pResult = 0;
}