Sur quel évènement doit on rafraîchir une image?
Bonjour,
Je pose ma question ici parce que je programme en C++/CLI ..
Ce n'est peut-être pas le bon endroit, j'ai cherché un peu partout et je ne trouve pas de réponse ..
Voilà le problème:
J'ai un dessin fait par des Drawline dans une pictureBox ...
J'ai écrit le logiciel de tel sorte que le dessin peut être très vite et facilement redessiné.
Bon mais je ne trouve pas un évènement simple pour décider quand le redessiner.
Je traque la souris et si elle sort puis rentre de nouveau dans la pictureBox, ça redessine ... donc sur ce point c'est bon ...
Par contre si je clique sur un item du menu dans la partie supérieure, je me retrouve avec un beau pavé blanc :aie:
Je ne vais quand même retracer sur un MouseMove ... sinon on retrace en permanence ..
Donc y a t-il un évènement bien particulier lié à pictureBox qui permettrait de la redessiner juste quand il le faut?
De plus au moment du FormLoad, mon dessin apparaît une fraction de seconde et disparaît ..
Je ne trouve pas pourquoi ..
Auriez vous une idée?
Merci d'avance
Bonne soirée
Jean-Louis
evenement pour redessiner le picturebox
bonjour,
1/sache une chose d'abord que le picturebox est tres mal adapte au dessin et qu'il est fait beaucoup plus pour les images.
voila son tort pour le drawing a cause s'il vous plait de sa propriete image.
parce que avec lui on doit dessiner dans un bitmap et mettre à jour a chaque fois sa propriete image pour le redessiner quand le contenu du bitmap change(sa propriete image doit recevoir =bitmap) .
2/deuxieme tort il ne dispose de scrollbars
maintenant pour l'evenement redessiner du picturebox il s'impose de rafraichir la propriete image à chaque fois qu'on modifie le bitmap .Cela arrive de modifier le bitmap dans lequel nous dessinons lorsque:
1-nous sommes "en train de dessiner" (mousemove) une nouvelle figure.
2-nous avons "termine de dessiner" (mouseup) une nouvelle figure.
3-nous sommes en train de "resizer" le controle window qui contient le picturebox.
maintenant essaie de transpose ton code de dessin dans un simple usercontrole,le coup du bitmap à gerer disparait et avec lui disparait la maj
picturebox.image=bitmap disparait.
1/c'est un de gagner
2/tout ce que tu dessine se fait directement sur le background du controle et il est persistant.ton "blanc" disparaitra.
2/tu gagne les scrollbar qui n'existe pas dans picturebox et avec la possibilite de zoomer
maintenant mieux encore plus avant pour une application de dessin pro ,tu dois suivre un modele "eprouve de drawing" (pattern).
1/separe la dession des figures du controle utilise.
-utilise une classe figure ancetre qui possede une propriete Paint(g as eventpaintargs)
-definit une bonne fois pour toutes les proprietes des figures communes.
-des classes herites de la figure ancetre pour l'implementation des proprietes et methodes qui sont toujours specifiques (type de shape).
2/dans le controle
-definit une liste des figures dessinees pour les memoriser et les redessiner ou supprimer une figure quand le besoin de mettre à jour le controle s'impose.
-geres mousedow, mais surtout mousemove et mouseup ou tu demande à chaque figure:
- d'execute sa methode Paint pour lui demander de se dessiner dans le controle (monrect.paint(g as eventpaintargs),-monellipse.paint(g as eventpaintargs))
-ajoute la nouvelle figure à la liste des figures.
-rafraichis le controle Me.Invalidate pour le mettre à jour.
voila un minimum de regles auquel il faut s'astreindre en matiere de dessin.
bon code....