0

我正在尝试为节点网络的可视化表示创建一个 .NET 应用程序。节点是可以用鼠标拖动的 Drawing.Rectangle 实例,并使用 Graphics.DrawLine 建立连接。如下所示。

网络

为了避免在拖动矩形时重绘矩形而留下丑陋的火车,我在组件上调用 Graphics.Clear 并在每次调用 Mouse_Move 时重绘每个矩形和线条。但这会导致非常丑陋的闪烁效果,因为我认为它的调用速度不够快......

是否有一些 .NET 功能或更好的方法来重绘这个场景,使刷新看起来更流畅?

我的代码:

    private void NodesPanel_MouseMove(object sender, MouseEventArgs e)
    {
        if (MouseButtons.Left == e.Button)
        {

            if (currentlyClickedNode != null)
            {
                surface.Clear(Color.White);
                drawUnselectedNodes();
                drawConnections();

                if (!ClickedNodeGate) // Clicked on the node
                {
                    currentlyClickedNode.setPosition(e.X - QuestNode.NODE_WIDTH / 2, e.Y - QuestNode.NODE_HEIGHT / 2);
                    currentlyClickedNode.drawMe(surface, penl);
                }
                else // clicked on the gate
                {
                    drawingLine = true;
                    currentlyClickedNode.drawMe(surface, penl);
                    DrawingHelper.DrawLine(surface, penl, currentlyClickedNode.getGatePosition(), new Vector2D(e.X, e.Y));
                }
            }
        }
    }

感谢您提供的任何帮助。

4

1 回答 1

1

这是一个非常复杂的话题,实际上有成千上万种不同的方法可以做到这一点。您将不得不了解更多有关 Windows 图形和窗口子系统的信息。您可能想从http://shop.oreilly.com/product/0790145369079.do开始

于 2012-11-05T18:06:50.580 回答