wxPanel周围的可移动对象

时间:2014-07-22 05:03:13

标签: wxwidgets

在wxWidgets中,我想在一个wxPanel上有两个对象,它们由一行连接,并且有一个鼠标按下事件来重新定位两个对象中任何一个的位置(该行应该自动重绘以跟随新的位置对象)。我尝试使用wxPaintDC绘制2个对象的初始位置(使用鼠标单击事件创建自定义)并使用dc.DrawLine将这两个对象与一条线连接在一起。我应该如何继续允许这两个对象随线移动(鼠标按下事件)?这甚至可以实现吗?

1 个答案:

答案 0 :(得分:2)

当然它是可能的(几乎所有东西都是,它只是"只是"努力的问题),但它并非完全无足轻重你可能想要使用OGL为你做这件事。另一方面,OGL很老了,很长一段时间都没有维护,所以如果你的需求非常简单,那么自己做的可能还要好。

如果你这样做,这里有一些提示:

  1. 对于鼠标处理,首先需要一个(如果可能的话有效)命中测试功能。
  2. 一旦拥有它,就可以很容易地检测到点击发生的位置以及它下面的物体,并在有意义的情况下开始移动它。为了更加用户友好,移动不应该立即开始,而是等到鼠标移动一点,或者保持按下一段时间(这样可以避免意外移动)。
  3. 当用户拖动鼠标时,您将收到wxEVT_MOTION个事件。在处理程序中使用wxMouseEvent::Dragging()来检查是否按下了任何鼠标按钮。
  4. 无论你做什么,你必须总是从你的wxEVT_PAINT处理程序中提取,即如果一个物体移动,你不能立即重绘它,而是更新它的位置,使它在移动前后所占的面积无效(使一切无效更简单,但效率更低)并从OnPaint()
  5. 中提取
  6. 您需要双缓冲以避免闪烁,请参阅wxAutoBufferedPaintDC