由于duilib网上内容非常少,但是可以研究源码,目前也有几个qq群还是很活跃,但是对于较为深入一点的问题却还是大部分人都不清楚的。这篇文章说一说 List 内部排序函数SortItems 的调用问题。
BOOL CListUI::SortItems(PULVCompareFunc pfnCompare, UINT_PTR dwData)
{
if (!m_pList)
return FALSE;
return m_pList->SortItems(pfnCompare, dwData);
}
这是内部定义。但是乍一看,不知道排序函数怎么写,参数又是什么意思。好了,不说废话了,直接上代码
下面是排序函数,也就是PULVCompareFunc pfnCompare 这个函数
int CALLBACK ListSortCompareFunc(UINT_PTR param1, UINT_PTR param2, UINT_PTR param3)
{
CListTextExtElementUI* pControl1 = (CListTextExtElementUI* )param1;
CListTextExtElementUI* pControl2 = (CListTextExtElementUI* )param2;
CDuiString strText1 = pControl1->GetText((int)param3 );
CDuiString strText2 = pControl2->GetText((int)param3 );
return strcmp(strText1.GetData(), strText2.GetData());
}//返回值的意义大家可以仔细看duilib里面的关于这一段的东西,源码更有说服力
pListExControl->SortItems(ListSortCompareFunc, 1);//这是一个简单的调用 pListExControl 是List的指针 SortItems 的第二个参数可以自己决定传什么,建议第三个参数可以传排序依据的列的索引号。 比如我传的是1 那么排序的依据是根据第一列的数据从小到大排序。顺序和倒叙是排序函数ListSortCompareFunc的返回值决定的。就这么多了,第一次写博客。