1

特别是在 wxHaskell 中,但总的来说,希望能够在两个并排的列表中的项目之间画线,以表明项目之间存在关系。类似于下面的样机。

两个项目之间带有箭头的列表框

4

2 回答 2

1

也许您的设置有一些我不明白的地方,但这似乎非常简单。

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

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

  • xi 和 xo 是常数

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

  • 现在从父窗口创建一个 wxClientDC

  • 并在华盛顿划清界限。

    parentWindowDC.DrawLine(xi,yi,xo,yo);

我注意到您在列表窗口的顶部显示了箭头。以上将把他们拉到后面。要将它们绘制在顶部,您将不得不做一些计算几何,然后您可以计算线 (xi,yi,xo,yo) 与两个列表框的边缘相交的点。然后你画三条线,使用相同的画笔,

  • 在输入窗口 DC 中 xi,yi 与输入框边缘的交点之间
  • 在父窗口 DC 中的两个交点之间
  • 输出框边缘与输出框 DC 中的 xo,yo 之间
于 2012-01-04T22:24:18.650 回答
0

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

  • 如果您需要一个跨平台的解决方案,那么绝对没有简单的方法来实现它。您可以尝试创建一个具有这些箭头形式的非矩形顶级窗口,并将其与您的框架一起移动。这是一个糟糕的解决方案,但我提到它只是仅供参考。
  • 如果您的应用程序仅适用于 Windows,那么您可以尝试查看 CodeProject 上的Locus Effect文章。也许它会提示您如何实现所需的功能
  • 对于 Windows,我认为您还可以使用 DirectX Overlay 或使用SetWindowRgn函数的非矩形控件。对于非矩形按钮对我来说效果很好,所以应该适用于你的情况。
  • 任何其他解决方案都将是特定于平台的,并且需要“本机”编码恕我直言。
于 2012-01-04T22:09:52.950 回答