MFC Clist cont控件的排序问题。
上面的42是总行数,我想知道怎么由IP地址的值又大到小,或由小到大进行排序。
[解决办法]
void CDlg::OnLvnColumnclickListDevice(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
//
int iSize = m_list.GetItemCount();
CArray<CString, CString> arrItemData;
arrItemData.SetSize(iSize);
for (int i = 0; i < iSize; i++)
{
arrItemData[i] = m_list.GetItemText(i, pNMLV->iSubItem);
m_list.SetItemData(i, (DWORD_PTR)&arrItemData[i]);
}
static int sort = 0;
static int SubItem = 0;
if (SubItem != pNMLV->iSubItem)
{
sort = 0;
SubItem = pNMLV->iSubItem;
}
else
{
if (sort == 0)
{
sort = 1;
}
else
{
sort = 0;
}
}
m_list.SortItems(OnListCtrlSort,(DWORD_PTR)&sort);
*pResult = 0;
}
int WINAPI CDlg::OnListCtrlSort(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CString &lp1 = *((CString *)lParam1);
CString &lp2 = *((CString *)lParam2);
int &sort = *(int *)lParamSort;
if (lp1==lp1.SpanIncluding(_T("1234567890")) && lp2==lp2.SpanIncluding(_T("1234567890")))
{
long s1 = _wtoi(lp1);
long s2 = _wtoi(lp2);
if (sort == 0)
{
return s1==s2 ? 0:(s1>s2 ? 1:-1);
}
else
{
return s1==s2 ? 0:(s1<s2 ? 1:-1);
}
}
else
{
if (sort == 0)
{
return lp1.CompareNoCase(lp2);
}
else
{
return lp2.CompareNoCase(lp1);
}
}
return 0;
}