使用wxWidgets,是否有一种直接的方法在两个列表中的项之间绘制线条?

时间:2012-01-04 21:32:23

标签: user-interface wxwidgets wxhaskell

特别是在wxHaskell中,但总的来说,希望能够在两个并排的列表中的项之间绘制线条,以显示项目之间存在关系。像下面的模型一样。

two list boxes with arrows between items

2 个答案:

答案 0 :(得分:1)

也许您的设置有些我不理解,但这看起来非常简单。

假设您想在输入1和输出3之间画一条线。

  • 在窗口的坐标系统中需要四个坐标,这两个坐标是两个列表的父级。让我们称他们为xi,yi,xo,yo

  • xi和xo是常量

  • yi和yo仅取决于列表中一行的高度和项目的索引号。

  • 现在从父窗口

  • 创建一个wxClientDC
  • 在DC中画出你的一行。

    parentWindowDC.DrawLine(XI,苡仁,XO,YO);

我注意到你在列表窗口的TOP上显示了箭头。以上将吸引他们。要在顶部绘制它们,您将需要执行一些计算几何,然后您可以计算线(xi,yi,xo,yo)与两个列表框的边相交的点。然后使用相同的画笔

绘制三条线
  • 在xi,yi和输入窗口DC中输入框边缘的交点
  • 之间
  • 在父窗口DC
  • 中的两个交叉点之间
  • 在输出框边缘和输出框DC中的xo,yo之间

答案 1 :(得分:0)

在wxWidgets中没有类,但有一些可能的解决方法:

  • 如果您需要跨平台解决方案,那么肯定没有简单的方法来实现它。您可以尝试创建一个非矩形的顶级窗口,该窗口具有这些箭头的形式,并将其与框架一起移动。这是一个糟糕的解决方案,但我只是提到它。
  • 如果您的应用仅限Windows,则可以尝试查看CodeProject上的Locus Effect文章。也许它会提供一些如何实现所需功能的提示
  • 对于Windows,我认为你也可以使用SetWindowRgn功能使用DirectX Overlay或非矩形控件。对于非矩形按钮,我的工作正常,所以应该适用于你的情况。
  • 任何其他解决方案都将针对特定平台,并且需要“本机”编码恕我直言。