关于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; }