专题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);
}即可完成排序功能!!!
正文
CListCtrl学习笔记(3)---中级篇(2)2007-01-03 17:44:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/yuqiexing/22196.html
阅读(3522) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论