2009-06-10 4 views
2

Je souhaite créer une planche à dessin partagée en C#. Cela signifie que deux personnes connectées via une connexion TCP peuvent dessiner sur cette carte. L'idée (pour l'instant) est que les gens peuvent cliquer sur l'écran et dessiner. Selon vous, quelle est la meilleure méthode pour cela?
Il est assez facile de dessiner un point lorsque l'utilisateur clique sur un certain endroit, mais cela devient un peu plus compliqué lorsque l'utilisateur fait glisser la souris, où vous devez tracer une ligne entre le dernier point et le courant. De plus, ça ne marche pas très bien, donc je dessine un point où la ligne commence à s'améliorer un peu, mais ce n'est pas très bon. Enfin, je dois également envoyer ceci sur TCP, donc j'ai besoin de faire la distinction entre les deux. J'espérais que je pourrais simplement envoyer des points et que ça l'attire de l'autre côté, mais il semble que ça ne marcherait pas. Des idées sauf aussi envoyer le type?souris suivie du dessin en C#

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

EDIT:
ok, je vais avec une interface IDrawingArgument qui a Dispatch (myForm), et ne essentiellement à double expédition, il résout le problème TCP (va linéariser/désérialiser) .
Les lignes sont encore un peu encombrantes.

Répondre

3

Un petit conseil ... sur votre événement mousemove. conserver un drapeau qui ne déclenchera plus l'événement jusqu'à ce que le dernier événement qui a déclenché le drapeau l'éteigne. i.e .:

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

Cela m'a beaucoup aidé lors du dessin dans un événement mousemove.

+0

Je pense que juste pourrait le faire. C'est fondamentalement une serrure, je suppose? – Nefzen

+0

Essayé, cela ne fait pas beaucoup de différence. – Nefzen

+0

La prochaine fois que j'ai ajouté était un retard ... Ne pas laisser l'événement de tirage au feu à moins d'avoir été au moins 5 millisecondes depuis le dernier tir .. ou 3 ms .. en fonction de votre méthode de tirage. Cela halète le dessin. –

0

points: (x, y), (x2, y2), (x3, y3)

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

Ainsi, le format est une liste de tuples. Les tuples de taille 4 sont des lignes, de taille 2 sont des points. Notez que si votre système est plus compliqué, vous regretterez vraiment pas faire quelque chose comme:

points: D (x, y), D (x2, y2), D (x3, y3)

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

Questions connexes