2013-02-12 15 views
3

我正在試圖在pictureBox中顯示的圖像上繪製某些東西。我使用鼠標活動的事件處理程序:onMouseUp,onMouseMove和onMouseDown。如何在C#中更快地處理MouseMove事件

private void onMouseDown(object sender, MouseEventArgs e) 
    { 
     mouseDown = true; 
    } 

    private void onMouseMove(object sender, MouseEventArgs e) 
    { 
     if (mouseDown) 
     { 
      using (Graphics g = pictureBox.CreateGraphics()) 
      { 
       g.FillEllipse(Brushes.Black, e.X - size, e.Y - size, size * 2, size * 2); 
      } 
     } 
    } 
private void onMouseUp(object sender, MouseEventArgs e) 
    { 
     mouseDown = false; 

     using (Graphics g = pictureBox.CreateGraphics()) 
     { 
      g.FillEllipse(Brushes.Black, e.X - size, e.Y - size, size * 2, size * 2); //just in case user just clicks instead of move the mouse 
     } 
    } 

我想模擬畫筆工具,當鼠標移動到pictureBox上時繪製指定大小(半徑)的圓。它在移動速度慢的時候效果很好,但是當運動速度更快時,pictureBox似乎只捕捉一些事件,很多圈子被跳過並且沒有繪製。特別是當半徑很小時。

我該怎麼做才能讓它更快更順暢?

回答

3

當鼠標移動時,鼠標指針所走過的每個像素都不會得到MouseMove事件。你會以相當一致的時間間隔得到它們,所以鼠標移動的速度越快,得到的點就越遠。這個你不能做太多的細節。

你需要做的是存儲最後一個點的位置,並在最後一個點和最後一個點之間的每個點繪製一個橢圓。

+0

這似乎是工作,運動現在看起來更流利。非常感謝! – SysGen 2013-02-12 12:32:01