在wxListBox中更改项的位置

时间:2012-10-31 12:36:44

标签: c++ drag-and-drop wxwidgets

我想问你如何动态更改wxListBox中项目的位置(例如拖放) 我刚刚找到了如何从wxWidget样本(用wxWidgets下载)中将项目插入wxListBox,名为dnd。

2 个答案:

答案 0 :(得分:2)

如果您只是想让用户重新排序列表框中的项目,请考虑使用wxEditableListBox。如果你真的需要拖放,应该可以像ravenspoint的答案中所解释的那样实现它,但它更难。

答案 1 :(得分:1)

最好从精确陈述的要求开始。

  1. 用户选择要移动的列表框中的项目
  2. 用户表示他想将项目拖动到新位置
  3. 用户选择要用拖动项目替换的列表框中的项目
  4. 应用程序按要求重新排列列表框中的项目。
  5. 第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. 用户重复直到项目处于所需位置