c++ - 用户完成拖放后重新排列多个选定的 ListView 项目

标签 c++ listview winapi

简介:

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

问题:

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

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

注意:

这篇文章已经过编辑,以回应声称我的原始问题没有寻求用户友好实现的评论。

关键是要实现标准的拖放行为,而我一开始问题措辞不佳的原因是我缺乏这方面的经验。

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

问候。

最佳答案

正常的拖放重新排序会删除所选项目并将它们重新插入新位置。将新地点的现有项目跳转到旧项目的来源是非常不直观的。

要实现“标准”重新排序,基本上您:

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

另请注意,您需要对项目被拖动到列表顶部的情况进行特殊处理。在这种情况下,您将从 0 开始插入,然后是 1 等等。

关于c++ - 用户完成拖放后重新排列多个选定的 ListView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28572655/

相关文章:

c++ - 如何刷新登录屏保参数变化?

python - EnumChildWindows 在 pywin32 中不工作

c++ - 在 gtk 文本字段中交换背景颜色 (gtkmm C++)

VS2010 中使用 lambda 参数捕获的 C++ 嵌套 lambda 错误?

android - 如何使用 volley android 实现一个 ListView

android - 列表中的数据在滚动时重复

c++ - 从隐藏变为可见时,如何阻止窗口短暂地重新出现在其最后可见的位置?

c++ - Visual Studio 命令提示符

c++ - 生成具有偶数汉明权重的整数(popcount)c++

java - 添加用于取消 ListView 中选择的监听器 (JavaFX)