CListCtrl按列排序

CListCtrl控件可以通过SortItems函数进行按任意列进行排序,但是不像其他语言具有自带功能,需要重载或者编写相关的程序。

第一步、在MainDlg中添加List Contro空间并置属性为Report(其他属性未使用过)
第二步、添加控件 LVN_COLUMNCLICK消息响应函数
第三步、在CMaindlg.h中添加变量
        CListCtrlCl m_m_listErrorInfo; //控件控制变量
BOOL m_bSortASC; //排序升序还是降序
DWORD m_dwSortColID; //指定列
        static int CALLBACK SortCompareFunc(LPARAM   lParam1,   LPARAM   lParam2,LPARAM   lParamSort); //排序回调函数
第四步、控件控制变量和控件绑定。
第五步、LVN_COLUMNCLICK消息响应函数如下:
void CMainDlg::OnLvnColumnclickMaindlgErrorinfolist(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

if (m_dwSortColID != pNMLV->iSubItem)
{
m_dwSortColID = pNMLV->iSubItem;
m_bSortASC = FALSE;
}

m_bSortASC = !m_bSortASC;


for (int i = 0; i < m_listErrorInfo.GetItemCount(); i++)
{
m_listErrorInfo.SetItemData(i, i);
}


m_listErrorInfo.SortItems( (PFNLVCOMPARE)SortCompareFunc,(DWORD_PTR)&m_listErrorInfo);
ResetErrorInfoItemColor();
*pResult = 0;
}
第六步、回调函数如下:
int CALLBACK CMainDlg::SortCompareFunc(LPARAM   lParam1,   LPARAM   lParam2,LPARAM   lParamSort)
{
CMainDlg *pMainDlg = (CMainDlg*)::AfxGetApp()->GetMainWnd();
CListCtrlCl * pListCtrl = (CListCtrlCl*)lParamSort; 


LVFINDINFO pInfo1, pInfo2;
pInfo1.flags = LVFI_PARAM;
pInfo2.flags = LVFI_PARAM;
pInfo1.lParam = lParam1;
pInfo2.lParam = lParam2;
int ind1 = pListCtrl->FindItem(&pInfo1);
int ind2 = pListCtrl->FindItem(&pInfo2);


CString strItem1 = pListCtrl->GetItemText(ind1,pMainDlg->m_dwSortColID);
CString strItem2 = pListCtrl->GetItemText(ind2,pMainDlg->m_dwSortColID);


if (pMainDlg->m_bSortASC == TRUE)
{
return lstrcmp( strItem1, strItem2 );
}
else
{
return lstrcmp( strItem2, strItem1 );
}
}
第七步、编译程序测试


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值