求解CListCtrl排序(关于排序函数)
在void MyCSortListCtrl::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)消息处理函数中:
下面是排序函数:
我调试的时候,当单击表头某一列跟进去,回调函数的lParam1和lParam2始终都是0和1,也就是说是对应的这一列的第0行和第1行(单元格)中的数据,按理说应该只是比较的这两项排列好了呀!?然而这一整列却都按照升序或者是降序排列好了,这是为什么?求指教!!
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);
.............................................................
.............................................................
.............................................................
.............................................................
}
我调试的时候,当单击表头某一列跟进去,回调函数的lParam1和lParam2始终都是0和1,也就是说是对应的这一列的第0行和第1行(单元格)中的数据,按理说应该只是比较的这两项排列好了呀!?然而这一整列却都按照升序或者是降序排列好了,这是为什么?求指教!!
...全文


