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 :

problème dessiner image dans fenêtre


Sujet :

MFC

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 6
    Points : 4
    Points
    4
    Par défaut problème dessiner image dans fenêtre
    Bonjour

    Comme je tourne en rond, je viens chercher de l'aide. J'essaye de faire un morpion en GDI, c'est pour apprendre. J'ai une fenêtre mère avec 9 fenêtres clientes.

    Aujourd'hui, le jeu fonctionne, sauf si la fenêtre est recouverte ou réduite, je n'arrive pas à stocker les images dessinées dans un ou plusieurs buffeurs pour les rappeler lorsqu'un WM_PAINT est envoyé.
    Ca fait des jours que j'essaye de trouver une solution et j'en peux plus, mon code est devenu un véritable champ de bataille.

    Y aurait-il une bonne âme pour me donner la portion de code me permettant d'afficher un bmp et surtout, de le stocker dans un buffer pour le rappeler lorsque un WM_PAINT est envoyé.

    Merci d'avance

  2. #2
    Membre habitué
    Inscrit en
    Juillet 2003
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 196
    Points : 165
    Points
    165

  3. #3
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    Moi je te conseil le double Buffering
    En gros :

    tu crée un DC en mémoire compatible avec ta fenetre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      //Pour un CDialog
      CPaintDC dc (this);
      CDC	*pDC = &dc;
      //Sinon pour une View CDC *pDC = this->GetDC();
      //Ensuite tu crée un DC mémoire compatible avec celui de ta fenêtre
      CDC	*MemDC	= new CDC();
     
      MemDC->CreateCompatibleDC(pDC);
    Ensuite tu crée un Bitmap mémoire et tu l'attache à ton DC mémoire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     CBitmap *Bmp	= new CBitmap();
     
      Bmp->CreateCompatibleBitmap(pDC,500,500);
     
      //Attacher le BMP au CDC;
      HBITMAP OldBMP = (HBITMAP) MemDC->SelectObject((HBITMAP)Bmp->GetSafeHandle());
    et maintenant sur ton évenement PAINT tu n'as plus qu'a faire un BitBlt ou un StretchBlt entre le DC de ta fenetre et ton DC Mémoire....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pDC->BitBlt(0,0, 500, 500, MemDC, 0, 0, SRC_COPY);
    Evidement quand tu feeme ton appli oublie pas la libérations mémoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      Bmp->DeleteObject();
      delete Bmp;
     
      MemDC->DeleteDC();
      delete MemDC;
    C'est tout...
    Qui va piano va sano...

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci

  5. #5
    mat.M
    Invité(e)
    Par défaut
    C'est un sujet abordé dans les FAQ de Visual C++ as-tu pris la peine de les consulter au moins ???

    Si tu as des problèmes de performances alors éventuellement songer à Direct X car le GDI c'est bien mais.....

  6. #6
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    j'ai écris :

    Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pDC->BitBlt(0,0, 500, 500, MemDC, 0, 0, SRC_COPY);
    il fallait comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pDC->BitBlt(0,0, 500, 500, MemDC, 0, 0, SRCCOPY);
    Qui va piano va sano...

Discussions similaires

  1. Problème alignement image dans fenêtre popup modale
    Par stefsas dans le forum Mise en page CSS
    Réponses: 0
    Dernier message: 21/07/2010, 11h56
  2. Réponses: 1
    Dernier message: 13/12/2006, 21h31
  3. Problème avec image dans JPanel
    Par littleshrimp dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 14/05/2006, 14h05
  4. [VB]Problème affichage image dans IE6
    Par flogreg dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/02/2006, 18h41
  5. Problème affichage image dans IE6
    Par flogreg dans le forum IE
    Réponses: 6
    Dernier message: 13/02/2006, 14h29

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