Bonjour tout le monde,
est ce que quelqu'un pourrait me dore comment dessiner un simple rectangle rempli sur une boite de dialogue? Je patine un peu avec les CDC.
Merci d'avance
Bonjour tout le monde,
est ce que quelqu'un pourrait me dore comment dessiner un simple rectangle rempli sur une boite de dialogue? Je patine un peu avec les CDC.
Merci d'avance
Bon en fait j'arrive a dessiner:
mais des que je deplace la fenetre le rectangle disparait...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CDC *hdc = this->GetDC(); CRect rect; rect.SetRect(10, 10, 100, 100); hdc->FillSolidRect(&rect, RGB(255, 255, 0)); this->ReleaseDC(hdc);
NB: dsl pour les accents mais j'ai un clavier QWERTY
Je ne sais pas où tu tapes ton bout de code mais essaye de le placer dans la méthode OnPaint() de ta classe si ce n'est pas fait. Normalement, en déplaçant ta boite de dialogue, le rectangle devrait rester affiché![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void CTestDlg::OnPaint() { CDialog::OnPaint(); CDC *hdc = this->GetDC(); CRect rect; rect.SetRect(10, 10, 100, 100); hdc->FillSolidRect(&rect, RGB(255, 255, 0)); this->ReleaseDC(hdc); }
Salut,
je tape mon code sur un bouton. La premiere fois que je clique sur le bouton, il me cree le rectangle mais des que je deplace la fenetre le rectangle disparait. Si je clique une deuxieme fois, le rectangle reapparait et a partir de ce moment il ne disparait plus !!
Donc en gros faut appeler ce code deux fois pour que le rectangle reste...Je ne comprends pas pourquoi:
En effet, cela semble assez bizarre...
J'ai testé en créant une boite de dialogue simple avec un bouton. Quand je clique, le rectangle apparait. Par contre, quand je déplace ma fenetre, elle ne disparait pas. Si par contre, la fenetre passe en arrière plan et que j'y reviens, le rectangle a disparu. Normal, car le code a été mis dans l'évènement BN_CLICK du bouton. Cet évènement n'est pas appelé quand la fenetre doit etre réaffichée...
C'est pourquoi je te disais de mettre ton code de dessin du rectangle dans la méthode OnPaint() qui, elle, est appelée automatiquement (il me semble, corrigez moi si je me trompe...), à chaque fois que la boite de dialogue doit etre réaffichée à l'écran (et tu peux aussi l'appeler directement pour "forcer" un rafraichissement de ta fenetre...)
Je ne comprends pas que ca ne disparaisse pas chez toi...
Et pour le OnPaint, peut etre que ca resoudrait le probleme, mais ca veut dire que le rectangle sera redessine a chaque fois que l'evenement est appele? Ca ne me parait pas tres propre...si ?
Avis aux connaisseurs...j'aimerai bien comprendre comment ca marche (pour le moment j'ai resolu mon robleme autrement en mettant tout simplement un composant CStatic de type Bitmap).
@+
N'étant pas un baroudeur du VC (commencé il y a quelques moisEnvoyé par Neo41
), je ne saurai pas te répondre; Attendons les avis des vieux de la vieille
.
Mais à priori, l'évenement OnPaint peut-etre appelé ou par ton appli ou par Windows automatiquement, lorsque cela est nécessaire (ex: quand ta boite de dialogue passe en arrière plan puis de nouveau au premier plan). Donc, si ton appli n'appelle pas l'évènement, le rectangle ne sera pas dessiné. Si c'est Windows qui appelle le OnPaint() de ta boite de dialogue, quand il faut redessiner la boite de dialogue, cela ne me parait pas aberrant de redessiner ton rectangle en même temps...
Partager