Changement de Pen/Brush d'un CDC

[Résolu]
Signaler
Messages postés
4
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
15 mars 2008
-
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
-
Bonjour à tous,

j'ai un problème (et oui) en MFC. Malgré que je change le Pen de mon DC cela ne modifie pas le dessin des lignes et des rectangles.

Voilà mon code :
-------------------------------------------------------------------------
void maclasse::onPaint()
{
     DrawImage();
}

void maclasse::DrawImage()
{
    CPen NewPen;
    NewPen.CreatePen(PS_SOLID, 6, RGB(255, 25, 5));
    CPen* oldPen = m_cObj.GetDC()->SelectObject(&NewPen);
   //la fonction SelectObject ne retourne pas NULL

    m_cObj.GetDC()->Rectangle(20, 22, 250, 125);



    m_cObj.GetDC()->SelectObject(&oldPen);
}

-------------------------------------------------------------------------

Où m_cObj est un objet CStatic associé à un Picture Control (BITMAP)

Quelqu'un a une idée d'où cela peut venir ? Je suis perdu, je vois pas l'erreur que j'ai dû faire.
Merci d'avance.

5 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

peut etre que si tu utilisais le meme DC a chaque fois ca marcherait
mieux (i.e. sauver la valeur de retour de m_cObj.GetDC() et la
reutiliser au lieu d'appeler GetDC a chaque fois).
Messages postés
4
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
15 mars 2008

Petite précision (utile), le rectangle s'affiche mais toujours en blanc avec une bordure noire. C'est là le problème.
Messages postés
55
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
1 novembre 2008

salut
est ce que tu rafraichis le dessin apres avoir modifié le Pen?
Messages postés
4
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
15 mars 2008

Merci pour vos réponses.

En fait 38720 aardman tu as raison. En stockant la valeur de retour, ça marche ! C'est stupide comme erreur, d'autant que c'était temporaire juste pour le test.
Par contre, j'aimerais comprendre pourquoi ça ne fonctionne pas si je rappelle GetDC() ? Le pointeur n'est pas censé changé non ?

Merci.

P.S. :
- =959350 azamharir c'est rafraîchi tout seul puisque c'est dans le OnPaint
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

C'est surement le même object qui t'est retourné (a verifier) mais GetDC initialise surement le dc avec les valeurs par defaut.

Une petite remarque tout de même, si tu es dans un OnPaint (handler
d'un WM_PAINT), tu dois utiliser un object CPaintDC pour dessiner et
non pas le DC retourné par GetDC.