2009-06-10 47 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)