IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Dessiner un rectangle sur une forme


Sujet :

MFC

  1. #1
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut Dessiner un rectangle sur une forme
    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
    "Don't think you are, know you are..." (Morpheus)

  2. #2
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Bon en fait j'arrive a dessiner:
    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);
    mais des que je deplace la fenetre le rectangle disparait...

    NB: dsl pour les accents mais j'ai un clavier QWERTY
    "Don't think you are, know you are..." (Morpheus)

  3. #3
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 79
    Points : 46
    Points
    46
    Par défaut
    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); 
    }

  4. #4
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    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 :
    "Don't think you are, know you are..." (Morpheus)

  5. #5
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 79
    Points : 46
    Points
    46
    Par défaut
    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...)

  6. #6
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    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).

    @+
    "Don't think you are, know you are..." (Morpheus)

  7. #7
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 79
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par Neo41
    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 ?
    N'étant pas un baroudeur du VC (commencé il y a quelques mois ), 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...

Discussions similaires

  1. dessiner un rectangle sur une video
    Par titou08 dans le forum Images
    Réponses: 5
    Dernier message: 02/06/2011, 02h43
  2. Dessiner un rectangle sur une plage de cellules donnée
    Par artisous43 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/09/2010, 20h06
  3. Dessiner un rectangle sur une image
    Par pika84 dans le forum 2D
    Réponses: 5
    Dernier message: 11/06/2007, 21h45
  4. Problème de dessin sur une form
    Par Alchemist dans le forum Delphi
    Réponses: 7
    Dernier message: 27/01/2007, 22h10
  5. [Image]Dessiner des rectangles sur une image
    Par navona dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 09/03/2006, 22h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo