problème de style de dessin d'un rectangle

problème de style de dessin d'un rectangle - C++ - Programmation

Marsh Posté le 07-10-2008 à 19:03:55    

Bonjour,
 
J'essaie de dessiner un rectangle en appliquant un Brush et un Pen spécifiques.
Pour ça, j'ai repris l'exemple de MSDN :
 

Code :
  1. CRect rect;
  2. this->GetDlgItem(IDC_CADRE)->GetClientRect(rect);
  3. // create and select a solid blue brush
  4. CBrush brushBlue(RGB(0, 0, 255));
  5. CBrush* pOldBrush = this->GetDC()->SelectObject(&brushBlue);
  6. // create and select a thick, black pen
  7. CPen penBlack;
  8. penBlack.CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
  9. CPen* pOldPen = this->GetDC()->SelectObject(&penBlack);
  10. // shrink our rect 20 pixels in each direction
  11. //rect.DeflateRect(20, 20);
  12. // draw a thick black rectangle filled with blue
  13. this->GetDC()->Rectangle(rect);
  14. // put back the old objects
  15. this->GetDC()->SelectObject(pOldBrush);
  16. this->GetDC()->SelectObject(pOldPen);


 
où IDC_CADRE est un picture control de mon IHM
 
=> Plutôt que d'avoir un rectangle, de taille de IDC_CADRE, bleu et encadré d'un trait noir épais, j'ai le rectangle à la bonne dimension mais il est blanc et entouré d'un cadre noir fin (styles par défaut je pense)!!!
 
Donc, j'aimerais savoir pourquoi ça se comporte comme ça alors que je change les CBrush et Cpen avant de dessiner ce rectangle!!
 
Merci d'avance.

Reply

Marsh Posté le 07-10-2008 à 19:03:55   

Reply

Marsh Posté le 07-10-2008 à 20:40:10    

Hmm, au hasard ton "this->GetDC()" va te créer un nouveau Device context à chaque que tu l'appelles et sera initialisé avec les styles par défaut.
 
Donc sauvegarde le pointeur au premier appel et réutilise cette valeur ensuite. Je ne connais pas trop les MFC, mais normallement un DC doit être libéré avec ReleaseDC(dc), sous peine de memory leak.

Reply

Marsh Posté le 07-10-2008 à 20:59:23    

ok merci,
 
J'essaie ça!!!

Reply

Marsh Posté le 07-10-2008 à 21:02:03    

ça marche bien mieux!!!!!
 
Merci beaucoup!!!!!!!!!!!!

Reply

Sujets relatifs:

Leave a Replay

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