[C/C++] comment connaitre la largeur d'un HPEN ?

comment connaitre la largeur d'un HPEN ? [C/C++] - C++ - Programmation

Marsh Posté le 22-06-2003 à 16:03:15    

bonjour !
 
voilà mon probleme :
 
je crée un HPEN comme ca :
currPen=CreatePen(PS_SOLID, 5, RGB(0, 0, 0));
 
maintenant je voudrai connaitre sa largeur, càd le deuxième parametre qui vaut 5 ici...
 
mais comment faire cela ?
et pour la couleur ?
 
ca doit pas etre bien compliqué mais je trouve pas  :??:  
 
merci  :jap: !

Reply

Marsh Posté le 22-06-2003 à 16:03:15   

Reply

Marsh Posté le 22-06-2003 à 16:08:47    

http://msdn.microsoft.com/library/ [...] s_912s.asp
 

Code :
  1. LOGPEN logpen;
  2. GetObject(hPen, sizeof (LOGPEN), &logpen);


 
edit : ce topic appartient a la catégorie 'C' mais bon on va pas chipoter... de toute facon c'est pas une bonne idée de séparer les 2


Message édité par Konar le 22-06-2003 à 16:16:14
Reply

Marsh Posté le 22-06-2003 à 16:23:12    

Konar a écrit :

http://msdn.microsoft.com/library/ [...] s_912s.asp
 

Code :
  1. LOGPEN logpen;
  2. GetObject(hPen, sizeof (LOGPEN), &logpen);


 
edit : ce topic appartient a la catégorie 'C' mais bon on va pas chipoter... de toute facon c'est pas une bonne idée de séparer les 2


 
 
euh ... je suis désolé mais g peur de ne pas comprendre  :sweat:  
 
je vois pas ou tu peut retrouver la largeur ...
tu pourrai, si possible m'expliquer un peu plus ?
 
merci !

Reply

Marsh Posté le 22-06-2003 à 16:25:25    

Code :
  1. LOGPEN logpen;
  2. GetObject(hPen, sizeof (LOGPEN), &logpen);
  3. logpen.lopnColor; // Color RGB
  4. logpen.lopnStyle; // Style
  5. logpen.lopnWidth.x; // Width


Message édité par Konar le 22-06-2003 à 16:27:52
Reply

Marsh Posté le 22-06-2003 à 16:29:10    

ca c ok.
 
donc ce qui serrai interessant c "logpen.lopnWidth; "
 
mais c'est une structure POINT.
 

Code :
  1. typedef struct tagPOINT {
  2.   LONG x;
  3.   LONG y;
  4. } POINT, *PPOINT;


 
et là je vois pas ou on trouve la largeur  :??:  
 
 
(en tout cas tu es rapide pour répondre !!!)

Reply

Marsh Posté le 22-06-2003 à 16:34:45    

la largeur se trouve ds le membre x de la struct POINT, le membre y sert apparemment a rien...

Reply

Marsh Posté le 22-06-2003 à 16:39:44    

ah bon  :pt1cable:  
 
alors ca doit être bon !
faut que je règle juste un autre probleme ( :fou: à mort les pointeurs NULL :fou: ) et ca devrai le faire !
 
merci pour ton aide !!


Message édité par camarchepoa le 22-06-2003 à 16:47:32
Reply

Marsh Posté le 22-06-2003 à 20:35:00    

bah en fait g l'impression que c pas ca du tout  :cry:  
 
voilà ce que me donne les Watch :
 

Code :
  1. - logpen {...}
  2. lopnStyle 3435973836
  3. - lopnWidth {x=-858993460 y=-858993460}
  4. x -858993460
  5. y -858993460
  6. lopnColor 3435973836


 
apparement x et y ne correspondent à rien ....

Reply

Marsh Posté le 22-06-2003 à 22:09:09    

chez moi ce bout de code marche nickel :

Code :
  1. HPEN hPen = CreatePen(PS_SOLID, 3, RGB(251, 54, 67));
  2. if (!hPen)
  3. return MessageBox(0, "error creating pen", "", 0);
  4. LOGPEN Pen;
  5. if (!GetObject(hPen, sizeof (LOGPEN), &Pen))
  6. return MessageBox(0, "error GetObject", "", 0);
  7. stringT str;
  8. str.Format("style(%d) width(%d) color(%d %d %d)", Pen.lopnStyle, Pen.lopnWidth.x, GetRValue(Pen.lopnColor), GetGValue(Pen.lopnColor), GetBValue(Pen.lopnColor));
  9. MessageBox(0, str.c_str(), "pen",  0);


 
teste la valeur de retour de CreatePen et GetObject, ou file ton code s'il est pas trop long

Reply

Marsh Posté le 22-06-2003 à 22:31:50    

Konar a écrit :

chez moi ce bout de code marche nickel :

Code :
  1. HPEN hPen = CreatePen(PS_SOLID, 3, RGB(251, 54, 67));
  2. if (!hPen)
  3. return MessageBox(0, "error creating pen", "", 0);
  4. LOGPEN Pen;
  5. if (!GetObject(hPen, sizeof (LOGPEN), &Pen))
  6. return MessageBox(0, "error GetObject", "", 0);
  7. stringT str;
  8. str.Format("style(%d) width(%d) color(%d %d %d)", Pen.lopnStyle, Pen.lopnWidth.x, GetRValue(Pen.lopnColor), GetGValue(Pen.lopnColor), GetBValue(Pen.lopnColor));
  9. MessageBox(0, str.c_str(), "pen",  0);


 
teste la valeur de retour de CreatePen et GetObject, ou file ton code s'il est pas trop long


 
 
en fait tu as raison ca marche bien, mon probleme viens d'ailleurs : je perds la valeur du pointeur mais cela semble alléatoire  :??:  
 
et puis ca commence à être un peu compliqué !
 
en tout cas merci beaucoup !
désolé de t'avoir fait bosser un dimanche ;)

Reply

Marsh Posté le 22-06-2003 à 22:31:50   

Reply

Marsh Posté le 22-06-2003 à 23:49:39    

si jamais qq cherche, voilà pour changer la taille :
 

Code :
  1. LOGPEN logpen;
  2. GetObject(currPen, sizeof (LOGPEN), &logpen);
  3. // Change la taille
  4. logpen.lopnWidth.x = logpen.lopnWidth.x+5;
  5. currPen=CreatePen( logpen.lopnStyle, logpen.lopnWidth.x, logpen.lopnColor );


 
le HPEN de départ s'appelle "currPen"
 
c cool :)

Reply

Marsh Posté le 23-06-2003 à 00:18:31    

CaMarchePoa a écrit :

si jamais qq cherche, voilà pour changer la taille :
 

Code :
  1. LOGPEN logpen;
  2. GetObject(currPen, sizeof (LOGPEN), &logpen);
  3. // Change la taille
  4. logpen.lopnWidth.x = logpen.lopnWidth.x+5;
  5. currPen=CreatePen( logpen.lopnStyle, logpen.lopnWidth.x, logpen.lopnColor );


 
le HPEN de départ s'appelle "currPen"
 
c cool :)


 
sans vouloir faire tout un roman win32 sur les objets gdi, en faisant ca tu ne 'changes' pas la width de ton pen mais tu en créés un autre, diffèrent de ton 1er pen. tu peux garder ce code la, mais il faut un appel à DeleteObject avant la nouvelle affectation de currPen pour effacer le 1er pen, sinon tu as perte d'1 objet gdi et de la ram qui va avec.

Reply

Marsh Posté le 23-06-2003 à 21:35:32    

exact !
 
comment quoi il faut faire attention en faisait des copier coller, j'ai retiré une ligne de trop  :ange:  
 
 
en tout cas ca le fait :)
 
 
il y a pas une fonction ModifyPen ou un truc comme ca ?
ca serrai mieux ... enfin sinon ca marche  :bounce:

Reply

Sujets relatifs:

Leave a Replay

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