排序比较函数
static 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);
}
}
排序过程:
void CLogAnalysisDlg::OnColumnclickListInfo(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
int Length = m_infoList.GetItemCount();
CArray<CString,CString> listItemData;
listItemData.SetSize(Length);
for (int i = 0; i < Length; i++)
{
listItemData[i] = m_infoList.GetItemText(i, pNMLV->iSubItem);
m_infoList.SetItemData(i, (DWORD_PTR)&listItemData[i]);//设置排序关键字
}
static int nSort = 0;
static int nSubItem = 0;
if (nSubItem != pNMLV->iSubItem)
{
nSort = 0;
nSubItem = pNMLV->iSubItem;
}
else
{
if (nSort == 0)
{
nSort = 1;
}
else
{
nSort = 0;
}
}
m_infoList.SortItems(MyCompareProc,(DWORD_PTR)&nSort);//排序
*pResult = 0;
}