1,首先定义要调用的排序函数
//********************************
//lsit排序调用函数(排序的规则方法自己定义)
//********************************
int CALLBACK MyCompareProc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)
{
CString &lp1 = *((CString *)lParam1);
CString &lp2 = *((CString *)lParam2);
int &sort = *(int *)lParamSort;
if (sort == 0)
{
return lp1.CompareNoCase(lp2);
}
else
{
return lp2.CompareNoCase(lp1);
}
}
2,在重载的CListCtrl类中响应LVN_COLUMNCLICK消息
void CListCtrlCl::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
//获得点击列的名称
CString strColumnName;//列名
LVCOLUMN lvcol;
TCHAR lpBuffer[256];
lvcol.mask = LVCF_TEXT|LVCF_SUBITEM;
lvcol.pszText = lpBuffer;
lvcol.cchTextMax = 256;
this->GetColumn(pNMLV->iSubItem, &lvcol);
strColumnName= lvcol.pszText;
if (strColumnName == _T("列的值"))
{
int Length = this->GetItemCount();
CArray<CString,CString> ItemData;
ItemData.SetSize(Length);
for (int i = 0; i < Length; i++)
{
ItemData[i] = this->GetItemText(i,pNMLV->iSubItem);
this->SetItemData(i,(DWORD_PTR)&ItemData[i]);//设置排序关键字
}
this->SortItems(MyCompareProc,(DWORD_PTR)&pNMLV->iSubItem);//排序
}
*pResult = 0;
}
(如果是控件的话,在控件所在的窗口中响应LVN_COLUMNCLICK消息,this换成CListCtrl对应的变量)