cListctrl的排序

网上看了看 还未实验

 

对于排序来说首先要确定排序列,然后是按升序或者降序排列,是一列还是多列排序。排序时主要是用到了ClistCtrl中的sortitems()排序函数,这个函数会要求我们自己来提供一个排序函数,以及一个在排序函数中会用到的自定义数据。

 

BOOL SortItems( PFNLVCOMPARE pfnCompare, DWORD dwData );

 

(1)排序函数:

pfnCompare 排序函数的定义是:

int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2,    LPARAM lParamSort);

lParam1:

lParam2:  分别是两个比较列的项数据,所以在做排序的时候必须为每列都要先设置项数据,调用setitemdata(),通过项数据我们可以确定每一个项,相当于ID标示的作用。

 

lParamSort:就是自定义数据。

 

对于自定义排序函数,返回的值为两(或多列)列比较的大小值。根据每两列比较的返回值进行排序之后会接着调用自定义排序函数,循环的进行排序。

 

(2)用户数据:

根据要求我们自定义一个结构体,包含我们想要排序的信息

struct  P_list{

int count;            //排序的列的数目,可以使多列的排序

int isub[];           //排序的列的列号

int  flage;           //排序的方式,按照升序排列还是降序排列

CLIstctrl* m_iset;  //指向列表控件的指针

}

 

下面是网上看的代码 .

 

 

示例代码:

 

struct MyData...{
     CListCtrl *listctrl;                 //CListCtrl控件指针
     int isub;        //l列号
     int seq;        //1为升序,0为降序
};

//次函数为非常重要函数。
int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)
...{
     MyData *p=(MyData *)lParamSort;
     CListCtrl* list =p->listctrl;
     int isub=p->isub;
     LVFINDINFO findInfo;
     findInfo.flags = LVFI_PARAM;
     findInfo.lParam = lParam1;
     int iItem1 = list->FindItem(&findInfo, -1);
     findInfo.lParam = lParam2;
     int iItem2 = list->FindItem(&findInfo, -1);                      //获取第二项的项数据
     CString strItem1 =list->GetItemText(iItem1,isub);     //根据项数据,获取项里面子项的lable 
     CString strItem2 =list->GetItemText(iItem2,isub);
     if(p->seq)
          return strcmp(strItem2, strItem1);                       
     else
          return -strcmp(strItem2, strItem1);

}

本代码来自CSDN博客,转载请标明出处:http://blog.csdn.net/precipitant/archive/2006/09/20/1254878.aspx

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值