简介:
我正在研究 ListView 的拖放功能。我卡在最后一步 -> 在用户完成拖放后重新排列多个选定的项目。
问题:
你能解释一下实现项目重排的算法吗?
我有用户释放鼠标后点击项目的索引。我有拖动项目的索引及其计数。伪代码也是可以接受的,但请注意,我可能会有跟进问题。
注意:
这篇文章已经过编辑,以回应声称我的原始问题没有寻求用户友好实现的评论。
关键是要实现标准的拖放行为,而我一开始问题措辞不佳的原因是我缺乏这方面的经验。
如果需要进一步说明,我会更新我的帖子。
问候。
最佳答案
正常的拖放重新排序会删除所选项目并将它们重新插入新位置。将新地点的现有项目跳转到旧项目的来源是非常不直观的。
要实现“标准”重新排序,基本上您:
- 记住用户将您的项目拖到的下方项目的索引。在上面的示例中,这将是
5
(假设新项目将插入 above Item 6) - 使用
LVM_DELETEITEM
一次一个地从列表中删除拖动的项目 - 如果拖动的项目最初位于新位置上方,请从您在第 1 步中记住的索引中减去拖动项目的总数。这将给我们
2
使用上面的例子。 - 最后,将拖动的项目重新插入到记住的索引处(记住要为每个附加项目递增新索引)。例如,第一个拖动的项目将被插入到位置
2
,然后下一个被插入到3
等等。
另请注意,您需要对项目被拖动到列表顶部的情况进行特殊处理。在这种情况下,您将从 0
开始插入,然后是 1
等等。
关于c++ - 用户完成拖放后重新排列多个选定的 ListView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28572655/