首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

MFC Clist cont控件的排序有关问题

2013-12-04 
MFC Clist cont控件的排序问题。上面的42是总行数,我想知道怎么由IP地址的值又大到小,或由小到大进行排序。[

MFC Clist cont控件的排序问题。
MFC Clist cont控件的排序有关问题
上面的42是总行数,我想知道怎么由IP地址的值又大到小,或由小到大进行排序。MFC Clist cont控件的排序有关问题
[解决办法]


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;
}

[解决办法]
CListCtrl的排序需要用到这个函数SortItems,你定义一个跟他第二个参数一样格式的函数,然后自定义排序规则。默认是按ASCII码排序

热点排行