duilib中对list容器内容进行排序
#include<locale>
#include<algorithm>
int CMainWnd::m_ListIndex;
extern bool ComPareWithTitleDesc(CListContainerElementUI* item1, CListContainerElementUI* item2);//降序
extern bool ComPareWithTitleAsce(CListContainerElementUI* item1, CListContainerElementUI* item2);//生序
void CMainWnd::ListSort(CDuiString listName, int index,int nType) //listName-需要排序的list名字,index-按照list中第几列排序,nType-排序方式 0-升序 ,1-降序
{
CListUI* pList = static_cast<CListUI*>(m_pm.FindControl(listName));
vector<CListContainerElementUI*>listElements;
for (int i = 0; i < pList->GetCount(); i++)
{
CControlUI* pControl = pList->GetItemAt(i);
if (pControl != NULL)
{
CListContainerElementUI* pListElement = static_cast<CListContainerElementUI*>(pControl);
listElements.push_back(pListElement);
}
}
m_ListIndex = index;
if(nType==0)
{
sort(listElements.begin(), listElements.end(), ComPareWithTitleAsce);
}
else if(nType==1)
{
sort(listElements.begin(), listElements.end(), ComPareWithTitleDesc);
}
vector<CListContainerElementUI*>::iterator listElementlter;
int m_index = 0;
for (listElementlter = listElements.begin(); listElementlter != listElements.end(); listElementlter++)
{
CListContainerElementUI* pListElement = *listElementlter;
pList->SetItemIndex(pListElement, m_index);
m_index++;
}
}
int CMainWnd::GetListIndex()
{
return m_ListIndex;
}
extern bool ComPareWithTitleDesc(CListContainerElementUI* item1, CListContainerElementUI* item2)
{
CListTextElementUI* plist1 = (CListTextElementUI*)item1;
CListTextElementUI* plist2 = (CListTextElementUI*)item2;
if (plist1 == NULL || plist2 == NULL) return false;
auto s2 = plist2->GetText(CMainWnd::GetListIndex());
auto s1 = plist1->GetText(CMainWnd::GetListIndex());
if (_tcscmp(s1, s2) > 0) return true;
else return false;
}
extern bool ComPareWithTitleAsce(CListContainerElementUI* item1, CListContainerElementUI* item2)
{
CListTextElementUI* plist1 = (CListTextElementUI*)item1;
CListTextElementUI* plist2 = (CListTextElementUI*)item2;
if (plist1 == NULL || plist2 == NULL) return false;
auto s2 = plist2->GetText(CMainWnd::GetListIndex());
auto s1 = plist1->GetText(CMainWnd::GetListIndex());
//if (_tcscmp(s1, s2) < 0) return true;
if (::strcmp(s1, s2) < 0) return true;
else return false;
}
使用方法:
ListSort("OnlineList", 1, 0);