永发信息网

CListCtrl::SortItems 内部数据怎么排序

答案:2  悬赏:30  手机版
解决时间 2021-03-12 02:04
CListCtrl::SortItems 内部数据怎么排序
最佳答案
列表控件(CListCtrl)的排序功能不像其它直接调用API就可以完成的功能一样.它比较复杂.今天将我的一点体会简单地谈一下. 列表控件的顶部有一排按钮,用户可以通过选择不同的列来对记录进行排序。但是 CListCtrl并没有自动排序的功能,我们需要自己添加一个用于排序的回调函数来比较两个数据的大小,此外还需要响应排序按钮被点击的消息。回调函数就好像是一个中断处理函数,操作系统在符合你设定的条件时自动调用。
·CListCtrl提供了用于排序的函数
函数原型为:
BOOL CListCtrl::SortItems( PFNLVCOMPARE pfnCompare, DWORD dwData);
其中第一个参数为全局排序函数(它就是回调函数)的地址,
第二个参数为用户数据,你可以根据你的需要传递一个数据或是指针。
该函数返回-1,代表第一项排应在第二项前面;
返回1代表第一项排应在第二项后面;
返回0代表两项相等。
·排序函数原形为:
int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
其中第三个参数为调用者传递的数据(即调用SortItems时的第二个参数dwData)。
第一和第二个参数为用于比较的两项的ItemData,你可以通过
DWORD CListCtrl::GetItemData( int nItem )/
BOOL CListCtrl::SetItemData( int nItem, DWORD dwData )来对每一项的ItemData进行存取。
在添加项时选用特定的CListCtrl::InsertItem也可以设置该值。由于你在排序时只能通过该值来确定项的位置所以你应该比较明确的确定该值的含义。
·我们什么时候需要排序(消息映射)呢?
实现这点可以在父窗口中对LVN_COLUMNCLICK消息进行处理来实现。
例子:
//排序回调函数实现
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// lParamSort contains a pointer to the list view control.
// The lParam of an item is just its index.
//以第一列为根据排序
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1, 0);
CString strItem2 = pListCtrl->GetItemText(lParam2, 0);
//比较两个数
LPCTSTR s1=(LPCTSTR)strItem1;
LPCTSTR s2=(LPCTSTR)strItem2;

int n1=atoi(s1);
int n2=atoi(s2);
if (n1>n2)
return -1;
else
return 1;
}
void C***::OnColumnclickList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
//调用排序函数
m_ShowData.SortItems( MyCompareProc, (DWORD)&m_ShowData );
*pResult = 0;
}

整个过程是这样的: 当你点击列表控件的表头时,此时它会向父窗口发送LVN_COLUMNCLICK消息,此时响应函数OnColumnclickList(),在该函数里面再调用列表控件的SortItems()成员函数,它会自动调用排序函数,完成排序功能.
全部回答
没有排序的,要自己加工封装的 再看看别人怎么说的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
因特网吧在哪里啊,我有事要去这个地方
绿巨人有毒吗
图表为2012年至2014年的某些日期的甲国货币与
上高速口有摄相头压实线算不算违章
酷派ivvi小i和vivo是什么关系
河南工程学院企业管理系是几年制
华典包装在什么地方啊,我要过去处理事情
有些植物也可以是消费者对吗
苹果手机。iOS怎么下载侠盗猎车
招标人自行组织招标应具备的条件和能力有()。
风之羽作品集
华为数据线多少钱一根
北京土豆什么时候收获
蒙娜丽莎婚纱摄影(朝京北路)地址有知道的么?
属于我国《合同法》调整范围的是指由()产生的
推荐资讯
中学生活给我们提出了哪些新的要求?适应初中
羊的寿命是多少
zepto 可以用scroll事件吗
为什么不能携带中国版的越南地图
瑞昌斯坦福发电设备公司地址在什么地方,想过
dnf月蚀献祭流加魔法秀和点燃吗?为什么?可
我的世界冰与火之歌龙骑士怎么用
熙盛源茶庄这个地址在什么地方,我要处理点事
中兴外包是什么意思
华为mate7充电电流最大在多少
快乐宝贝母婴生活馆大岭店地址在哪,我要去那
韩国旅游攻略,江原道怎么样?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?