3

我想问你如何在wxListBox 中动态改变一个项目的位置(例如拖放) 我只发现了如何从名为dnd 的wxWidget 示例(使用wxWidgets 下载)中将项目插入wxListBox。

4

2 回答 2

2

如果您只想允许用户重新排序列表框中的项目,请考虑使用wxEditableListBox。如果你真的需要拖放,应该可以按照 ravenpoint 的回答中的说明来实现它,但这更难。

于 2012-11-01T00:57:24.343 回答
1

始终最好从明确规定的要求开始。

  1. 用户在列表框中选择要移动的项目
  2. 用户表示他想将项目拖到新位置
  3. 用户选择列表框中的项目以替换为拖动的项目
  4. 应用程序根据要求重新排列列表框中的项目。

第 1 步似乎很简单。我想你不需要帮助吗?

第 2 步是最棘手的。您将需要处理鼠标事件,以便检测用户何时在项目中拖动鼠标。这是鼠标事件类的文档http://docs.wxwidgets.org/trunk/classwx_mouse_event.html 您需要了解大部分内容才能完成这个技巧!

第 3 步也很棘手。当用户在拖动后释放按钮时,您需要从事件中获取鼠标位置,并计算释放按钮时鼠标下方的项目。您需要一个 HitTest 方法。wxListBox 有吗?我怀疑不是!也许您应该考虑使用 wxListCtrl,而不是尝试自己构建。 http://docs.wxwidgets.org/trunk/classwx_list_ctrl.html#ac346d7aa18722fb54580d4c4ed5cf113

第 4 步。现在,在所有鼠标处理之后,您应该在(您的调用)之前或之后插入已移动的项目和要插入的项目 清除列表框,然后按新顺序插入项目。

这一切似乎是个大麻烦。这个功能真的那么重要吗?你能接受一个更简单的用户界面,只需一小部分编码、测试和调试就可以完成工作吗?

像这样的东西:

  1. 用户选择要移动的项目
  2. 用户选择向上或向下移动项目(向上/向下箭头键、鼠标左/右键、滚轮都是可能的)
  3. 应用程序向上或向下移动所选项目
  4. 用户重复直到项目处于所需位置
于 2012-10-31T12:50:58.003 回答