CtrlList 排序问题。

点击列标题进行排序。

1,定义两个变量:
BOOL m_iSortFlag; //用来指示本次排序是升序还是降序
int m_iSort;//排序依据的列号

2,为CtrlList添加事件:
void CCardManageDlg::OnColumnclickWareTable(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
  m_iSort = pNMListView->iSubItem;
for(int i = 0;i < m_waretable.GetItemCount();i++)
{
  m_waretable.SetItemData(i,i);//为所有行设置一个序号,排序的依据。
}   
m_iSortFlag > 0 ? m_iSortFlag=-1 : m_iSortFlag=1;// 确定升降序 
m_waretable.SortItems((PFNLVCOMPARE)CompareFunc,(LPARAM)this);//发送排序信息给排序函数。

*pResult = 0;
}

3,实现排序函数,此函数的功能是比较两行的大小,这里比较字符串的大小:
int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)

   
CListCtrl* pListCtrl = &(((CCardManageDlg*)lParamSort)->m_waretable); 
CString strItem1 = pListCtrl->GetItemText(lParam1,((CCardManageDlg*)lParamSort)->m_iSort); 
CString strItem2 = pListCtrl->GetItemText(lParam2,((CCardManageDlg*)lParamSort)->m_iSort); 
TRACE("lParam1=%d %s compare with  lParam2  = %d %s \n",lParam1,strItem1,lParam2,strItem2); 
return strcmp(strItem2,strItem1)*((CCardManageDlg*)lParamSort)->m_iSortFlag;//乘以iSortFlag以实现点一次换一种排序法。
}

转载于:https://www.cnblogs.com/aoyihuashao/archive/2009/12/14/1623691.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值