2012-11-05 2 views
0

노드 네트워크를 시각적으로 표시하기 위해 .NET 응용 프로그램을 만들려고합니다. 노드는 마우스로 드래그 할 수있는 Drawing.Rectangle 인스턴스이며 Graphics.DrawLine을 사용하여 연결합니다. 아래처럼. .NET에서 노드 네트워크 그리기 화면이 너무 느리게 재생 됨

network

는 사각형들은 드래그 때, 내가 구성 요소에 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)); 
       } 
      } 
     } 
    } 

감사합니다.

+0

양식/패널에 대해 이중 버퍼링을 설정 했습니까? http://msdn.microsoft.com/en-us/library/system.windows.forms.control.doublebuffered.aspx –

+1

코드를 현재 수행중인 방식으로 표시하십시오. –

+0

관련 코드 비트를 추가했습니다. 결과가없는 폼에서 DobuleBuffered를 사용하려고했습니다. – Alex

답변

1

이것은 매우 복잡한 주제이며, 실제로이 작업을 수행하는 수천 가지 방법이 있습니다. Windows 그래픽 및 윈도우 하위 시스템에 대해 더 많이 배워야 할 것입니다. http://shop.oreilly.com/product/0790145369079.do

관련 문제