16,472
社区成员
发帖
与我相关
我的任务
分享
void MyCSortListCtrl::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
if(pNMLV->iSubItem == m_nSortCol)
{
m_bAscending = !m_bAscending;//升序或降序
}
else
{
m_bAscending = TRUE;
m_nSortCol = pNMLV->iSubItem;
}
//要想使用LPARAM这个参数,就必须调用CListCtrl的SetItemData方法进行相关的(行)绑定
long lItemCount = this->GetItemCount();
for(long i=0;i++;i<lItemCount)
{
SetItemData(i,i);
}
SortItems(ListCompare, (DWORD)this);
UpdateData(FALSE);
*pResult = 0;
}
int CALLBACK CSortListCtrl:: ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CSortListCtrl* pList = (CSortListCtrl*)lParamSort;
int nItem1,nItem2;
LVFINDINFO FindInfo;
FindInfo.flags = LVFI_PARAM;
FindInfo.lParam = lParam1;
nItem1 = pList->FindItem(&FindInfo, -1);
FindInfo.lParam = lParam2;
nItem2 = pList->FindItem(&FindInfo, -1);
.............................................................
.............................................................
.............................................................
.............................................................
}
int CALLBACK CSortListCtrl:: ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CSortListCtrl* pList = (CSortListCtrl*)lParamSort;
++pSortList->xx;
int CALLBACK ListCompareFunc(
LPARAM lParam1,
LPARAM lParam2,
LPARAM lParamSort)
{
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(static_cast<int>(lParam1), 1);
CString strItem2 = pListCtrl->GetItemText(static_cast<int>(lParam2), 1);
int x1 = _tstoi(strItem1.GetBuffer());
int x2 = _tstoi(strItem2.GetBuffer());
int result = 0;
if ((x1 - x2) < 0)
result = -1;
else if ((x1 - x2) == 0)
result = 0;
else
result = 1;
return result;
}
void CCListCtrl_s2Dlg::OnBnClickedButton1()
{
// SortItemsEx
m_listCtrl.SortItemsEx( ListCompareFunc, (LPARAM)&m_listCtrl );
}