VC++.net (2003) et les Graphics/PictureBox

VC++.net (2003) et les Graphics/PictureBox - C++ - Programmation

Marsh Posté le 30-09-2010 à 07:34:26    

Bonjour a tous,
 
Suite a un probleme de compatibilite de librairies, je dois quitter VB pour venir a VC++. Je developpe un appli avec un GUI et c'est la premiere fois (j'ai fait beaucoup de C/C++ mais pour des applis console).
 
J'etais arrive sans trop de souci a creer un picture box et modifier des pixels sous VB.
Mais avec VC++ je n'y arrive pas.  
 
J'essaie de creer un graphics, que je lie au picture box, je dessine puis je refresh, mais rien a faire !
 
Quelqu'un a une idee ?
 

Code :
  1. Graphics* g;
  2.             Color black = Color::Black;
  3.             g = PictureBox1->CreateGraphics();
  4.             Pen* blackPen = new Pen(black);
  5.             PictureBox1->BackColor = Drawing::Color::White;
  6.             g->DrawLine(blackPen, 100, 100, 400, 400);
  7.             PictureBox1->Refresh();


 
(desole pour les accents, clavier US)

Reply

Marsh Posté le 30-09-2010 à 07:34:26   

Reply

Marsh Posté le 30-09-2010 à 10:03:58    

Peut-être que g n'est pas bon.
Il faut que cela vienne du paint event handler, ce qui ne semble pas être le cas ici.
Voir l'exemple http://msdn.microsoft.com/en-us/library/xckcwxsa.aspx
 
En plus, il ne faut pas raffraichir, car sinon, selon l'endroit ou le dessin est fait, le dessin est écrasé, ou bien il est dessiné deux fois, ou encore il est redessiné une infinité de fois.
 
D'une manière générale, sous Windows, il existe un bon et un mauvais moment pour dessiner.
Le bon moment, c'est quand Windows gère le message WM_PAINT qui est au coeur de la gestion des fenêtre Windows, et qui, au niveau supérieur, s'appelle le paint event handler.
Le mauvais moment, c'est en dehors du cas précédent.
Il existe un paint event handler par fenêtre (le mot fenêtre peut désigner une fenêtre ordinaire, ou un bouton, ou autre chose). Chaque fenêtre est identifiée par son handle (handle != handler). En C++, les handle sont implicites. Ils dépendent de l'objet concerné par le contexte.
 
De plus, il faut aussi se méfier du système de coordonnées, car parfois l'unité est le pixel, et parfois l'unité est autre chose, donc quand on écrit x=100 on peut se retrouver parfois hors des limites.

Reply

Marsh Posté le 30-09-2010 à 10:22:30    

Je n'ai pas trop peur de mon systeme de coordonnees pour mon application. Ici c'est bien le pixel.
 
Pour le reste, sais tu s'il y a de grosses differences entre .NET 2003 et .NET 2005 sur le sujet des graphics/picturebox?
 
Par exemple, j'essaie d'appliquer les tutos msdn les declarations telles que :  
 
      Graphics^ g = e->Graphics;
 
Ne compilent pas. (ainsi que gcnew qui sont souvent utilisees dans leur tuto)
 
Ah lala... c'etait pourtant si simple avec vb.net :'(

Reply

Marsh Posté le 30-09-2010 à 10:48:32    

Non, il n'y a pas de différence pour cela.
 
L'exemple avec la Picture Box est http://msdn.microsoft.com/en-us/li [...] phics.aspx
En bas, il est noté que cela marche avec les versions 4, 3.5, 3.0, 2.0, 1.1, 1.0. Donc, c'est du super basic.
 
Quels sont les messages d'erreur ?
 
Il doit y avoir un problème de paramétrage pour la compilation.
 
Parfois, il arrive que les exemples de la doc MSN soient buggués, mais c'est rare.

Reply

Marsh Posté le 30-09-2010 à 13:42:10    

Si je fais du simple cut and paste..
 
Visual Studio Projects\a\a\Form1.h(1287) : error C2065: 'gcnew' : undeclared identifier
Visual Studio Projects\a\a\Form1.h(1301) : error C2143: syntax error : missing ';' before '^'
Visual Studio Projects\a\a\Form1.h(1304) : error C2065: 'g' : undeclared identifier
Visual Studio Projects\a\a\Form1.h(1287) : error C2039: 'PictureBox1_Paint' : is not a member of 'a::Form1'
 
Le ^ est utilise dans l'exemple pour :
Graphics^ g = e->Graphics;
 
 

Reply

Marsh Posté le 30-09-2010 à 15:14:10    

Il faudrait que PictureBox1_paint soit un membre de Form1. Comment et à quel endroit est déclaré PictureBox1_paint ?
 
Est-ce que dans les options du projet, il y a bien Common Language Runtime Support ?

Reply

Marsh Posté le 30-09-2010 à 15:34:26    

Comme je vais devoir filer, je voulais juste te donner les derniers "improvements"
 
 - J'avais deja une erreur de majuscule sur PictureBox1_paint... Pas joyeux.
 - En changeant les ^ en *... Ca compile mais...
 
Ca ne dessine rien.
 
Je regarderai pour CLR. pour le moment je ne sais pas te dire !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed