2009-06-10 70 views
2

我想在C#中製作共享繪圖板。這意味着通過TCP連接連接的兩個人可以在該板上繪圖。這個想法(現在)是人們可以點擊屏幕並繪製。你認爲最好的方法是什麼?
當用戶點擊某個點時很容易繪製點,但當用戶拖動鼠標時需要在最後一點和當前點之間繪製一條線,這會變得更加複雜。此外,這並不好,所以我畫了一個點,開始改善一點,但不是那麼好。鼠標隨後在C#中繪製#

最後,我還需要通過TCP發送這個,所以我需要區分這兩者。我希望我可以發送點數並讓它在另一邊繪製,但似乎不起作用。任何想法除了發送類型?

drawing http://img193.imageshack.us/img193/9697/drawingw.png

編輯:
好吧,我與具有調度(myForm會)一IDrawingArgument接口去,基本上都雙調度,所以它解決了TCP的問題(要序列化/反序列化) 。
線條仍然有點笨重。

回答

3

在你的mousemove事件上的一個小技巧。保持一個不會再次觸發事件的標誌,直到最後一次設置標誌將其關閉。即:

bool isDrawing = false; 
public void myCanvas_MouseMove(object sender, EventArgs e) 
{ 
    if(!isDrawing) 
    { 
     isDrawing = true; 
     // Do drawing here 
     isDrawing = false; 
    } 
} 

這對我在mousemove事件中繪圖時幫助很大。

+0

我認爲只是可能會這樣做。我估計它基本上是一把鎖。 – Nefzen 2009-06-10 15:24:16

+0

試過了,它沒有太大區別。 – Nefzen 2009-06-10 15:33:50

+0

下一次我加了一個延遲......不要讓繪製事件觸發,除非它自上一次被激發後至少5毫秒被激發..或3ms ..這取決於你的繪製方法。這可以平滑繪圖。 – 2009-06-10 16:32:53

0

點: (X,Y),(X2,Y2),(X3,Y3)

線: (X,Y,X2,Y2),(X3,Y3,X4,Y4)

因此,格式是元組列表。尺寸4的元組是線,尺寸2是點。請注意,如果你的系統變得更加複雜,你真後悔不只是做這樣的事情:

點: d(X,Y),d(x2,y2),d(X3,Y3)

行: L(x,y,x2,y2),L(x3,y3,x4,y4)