求解CListCtrl排序(关于排序函数)

me5438 me5438 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在void MyCSortListCtrl::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)消息处理函数中:

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行(单元格)中的数据,按理说应该只是比较的这两项排列好了呀!?然而这一整列却都按照升序或者是降序排列好了,这是为什么?求指教!!
...全文
评论 11
收藏 已收藏
分享
返回顶部
me5438
VC/MFC 16,550 成员 421,606 内容