用户完成拖动后重新排列多个选定的列表视图项目。下降

时间:2015-02-17 22:48:22

标签: c++ listview winapi

介绍使用:

我正在研究listview的拖放功能。我被困在最后一步 - >用户完成拖放后重新排列多个所选项目。

问题:

你能解释一下实现项目重新排列的算法吗?

我有用户释放鼠标后点击项目的索引。我有拖动项目的索引和计数。伪代码也是可以接受的,但要注意我可能会跟进问题。

注:

此帖子已经过编辑,以回应声称我原来的问题没有寻求用户友好实施的评论。

重点是实施标准拖动和放弃行为,以及我在第一时间对我的问题表达不好的原因是我缺乏这方面的经验。

如果需要进一步说明,我会更新我的帖子。

问候。

1 个答案:

答案 0 :(得分:2)

正常阻力&删除重新排序将删除所选项目并将其重新插入新位置。新地点的现有物品跳到原来的地方是非常不直观的。

实施"标准"重新排序,基本上你:

  • 请记住用户拖动项目的项目索引。在上面的示例中,这将是5(假设要插入新项目上方项目6)
  • 使用LVM_DELETEITEM
  • 一次从列表中删除拖动的项目
  • 如果拖动的项目最初高于新位置,则从您在步骤1中记住的索引中减去拖动项目的总数。这将使我们2使用上面的示例
  • 最后,将拖动的项目重新插入记住的索引(记住为每个附加项目增加新索引)。例如,第一个拖动的项目将插入位置2,然后插入3,依此类推。

另请注意,对于将项目拖动到列表顶部的情况,您需要进行特殊处理。在这种情况下,您可以在0,然后1开始插入,依此类推。