listview排序?

亚细亚 2010-05-31 03:14:55
通过排序调用回调函数int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM SortType);
lParam1与lParam2是LV_ITEM中的参数lParam,
但是向listview中添加LV_ITEM时,并没有设置lParam的值,为什么回调函数CompareFunc也能排序?
...全文
141 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
finder_zhang 2010-06-01
  • 打赏
  • 举报
回复
试了一下代码,原来 SetItemData() 的时候,所设的值,就是 lParam 的值.

m_List.InsertItem(0,"abc",0);
m_List.SetItemData(0,0x30);
LVITEM lvi;
lvi.iItem = 0;
m_List.GetItem(&lvi);

试了一下这个代码,把SetItemData 传 0x30 进去,然后再读出 LVITEM ,然后发现lParam = 0x30
怪不得看到有人说用SetItemData来设排序的参数,原来SetItemData与设这个lParam 是一样的.
lomicbily 2010-06-01
  • 打赏
  • 举报
回复
围观·
greatsong 2010-06-01
  • 打赏
  • 举报
回复
CompareFunc是回调函数, 调用SortItems时将CompareFunc作为参数传给系统,系统保留这个函数指针, 当系统对两个Item进行排序时会调用这个排序函数进行排序, lParam1与lParam2就是SetItemData设置的值
finder_zhang 2010-06-01
  • 打赏
  • 举报
回复
一个最简单的冒泡法排序,就是不断地(按照冒泡法的规律)比较 2个元素的大小,然后决定是否去调换2个元素的位置.

而CListCtrl排序时,也是不断地比较2个元素,lParam 就是被用来比较的元素的 lParam 值.
这个不断地调用,就是按照他内部的排序算法,不断地找元素去比较.
亚细亚 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 finder_zhang 的回复:]

试了一下代码,原来 SetItemData() 的时候,所设的值,就是 lParam 的值.
C/C++ code

m_List.InsertItem(0,"abc",0);
m_List.SetItemData(0,0x30);
LVITEM lvi;
lvi.iItem = 0;
m_List.GetItem(&lvi);


试了一下……
[/Quote]
资料上说SortItemS说不断地调用函数CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM SortType)
不明白怎么不断地调用?调用过程中lParam1与lParam2如何变化?
finder_zhang 2010-05-31
  • 打赏
  • 举报
回复
排序的时候,拿冒泡法来举例吧,是2个循环,然后不断地去找2个要排序的元素来执行比较的动作.
而这个比较的动作,就是用我们的CALLBACK CompareFunc 来做.
每一次的比较,就把对应2个元素的lParam 值拿出来,传到函数中,CompareFunc 再来根据lParam的情况来比.然后返回一个值.
外部的排序循环,再根据我们返回的值,去决定排序的动作.
finder_zhang 2010-05-31
  • 打赏
  • 举报
回复
SetItemData的话,只是记录一个 DWORD 的值在对应的ITEM里面.请问下这个跟排序有什么关系的?
finder_zhang 2010-05-31
  • 打赏
  • 举报
回复
不设 lParam 的话,排出来的是什么序?乱排?还是说有规律的?
亚细亚 2010-05-31
  • 打赏
  • 举报
回复
lParam1,lParam2没有循环调用,怎么排序?其中的原理很是模糊,还请大侠给与帮助。谢谢!
亚细亚 2010-05-31
  • 打赏
  • 举报
回复
排序时是否隐含调用了SetItemData()?
xiuxianshen 2010-05-31
  • 打赏
  • 举报
回复
没有设置值并不代表没有值,就像没有初始化时其实还是有值的,不过不正确和不规范而已

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧