正文

CListCtrl学习笔记(3)---中级篇(2)2007-01-03 17:44:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yuqiexing/22196.html

分享到:

专题2:CListCtrl中如何实现排序功能? 1.排序功能的实现需要用到下面这个函数: BOOL SortItems( PFNLVCOMPARE pfnCompare, DWORD dwData ); 其中 第一个参数是回调函数的指针,后面是所要传递的参数 而回调函数一般定义如下: int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2,    LPARAM lParamSort); 其中lParam1是其中list的一项数据,而lparam2是另外一项,第三个参数是刚才传递过来的参数. 2.举例如下: (1)回调函数的编写 注意回调函数必须是全局或者静态的,并且不能调用成员变量,所以要凭借最后一个参数传递某些数据. int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort){ //传递list指针 Cmylist *list=(Cmylist*)lParamSort; //获得指定行的索引号 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,list->selectedField);  CString strItem2 =list->GetItemText(iItem2,list->selectedField); //判断是升序还是降序  if(!list->shunxu)  if(index==1)//判断数据类型是整型还是字符串  return strcmp(strItem2, strItem1);  else  return atoi(strItem2)-atoi(strItem1);  else  if(index==1)  return -strcmp(strItem2, strItem1);  else  return atoi(strItem1)-atoi(strItem2);} (2)调用函数的编写 如果是点击列头响应排序功能,那么请响应LVN_COLUMNCLICK: 如果是其他,例如响应菜单项: void Cmylist::OnSheng() { // TODO: Add your command handler code here shunxu=TRUE; SortItems(CompareFunc,(LPARAM)this);} void Cmylist::OnJiang() { // TODO: Add your command handler code here shunxu=FALSE; SortItems(CompareFunc,(LPARAM)this);} 即可完成排序功能!!!

阅读(5180) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册