首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于ListCtrl SortItem 和 SetItemData的有关问题

2012-05-21 
关于ListCtrl SortItem 和 SetItemData的问题看了网上很多帖子, 在排序前一定要使用SetItemData,不然只有

关于ListCtrl SortItem 和 SetItemData的问题
看了网上很多帖子, 在排序前一定要使用SetItemData,不然只有第一次排序能得出正确结果,再之后的排序就不对

那有什么办法不用SetItemData就能完成排序? 即 保持每个项的ItemData

[解决办法]
因为比较函数里使用元素得Data值作为参数,因此你完全不涉及data是不可能得。你必须有办法根据data值找到两个待比较得元素,你不setitemdata,系统怎么进行比较?不进行比较,又怎么进行排序呢?

一般情况下,我从来不在Data部分保存有用得数据,我一般会另外创建一个数据结构(如CArray对象)保存有用数据,然后把list得元素得data设置为这个array里对应元素得下标。因此我们可以根据item data找到你所需要得数据。这样你就不必担心每次SetItemData把有用得值冲掉了
[解决办法]

C/C++ code
       // Initialize LVITEM members that are common to all items.    LVITEM lvI;    lvI.mask = LVIF_TEXT | LVIF_IMAGE |LVIF_STATE;      lvI.iSubItem = 0;    lvI.state = 0;     lvI.stateMask = 0;     lvI.pszText = LPSTR_TEXTCALLBACK; // sends an LVN_GETDISPINFO message    // Initialize LVITEM members that are different for each item.     for (int index = 0; index < cItems; index++)    {        lvI.iItem = index;        lvI.iImage = index;        lvI.lParam = ????;            // Insert items into the list.        if (InsertItem(&lvI) == -1)            return FALSE;    } 

热点排行