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 :

probleme affichage Gdi


Sujet :

MFC

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut probleme affichage Gdi
    je coince sur un problème d'affichage d'une image. Dans un CView, le onPaint avec le code suivant fonctionne très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    CPaintDC dc(this); // device context for painting
     
    	// TODO: Add your message handler code here
    	CBitmap BmpLoaded;
    	CDC MemDC;
    	// Create a memory device compatible with the above CPaintDC variable
    	MemDC.CreateCompatibleDC(&dc);
     
    	BmpLoaded.DeleteObject();
    	HBITMAP hBitmap = NULL;
    	hBitmap = (HBITMAP)LoadImage(NULL, _T("c:\\image.bmp"), IMAGE_BITMAP, 0, 0,
    									LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
    	BmpLoaded.Attach(hBitmap);	
     
    	// Select the new bitmap
    	CBitmap *BmpPrevious = MemDC.SelectObject(&BmpLoaded);	
     
    	// Copy the bits from the memory DC into the current dc
    	CRect rect;
    	this->GetClientRect(&rect);
    	dc.BitBlt(0, 0, rect.Width(), rect.Height(), &MemDC, 0, 0, SRCCOPY);
     
    	// Restore the old bitmap
    	dc.SelectObject(BmpPrevious);
    Par contre, si je remplace les CBitmap par des Gdi+ Bitmap, plus rien n'est affiché :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    CPaintDC dc(this); // device context for painting
     
    	// TODO: Add your message handler code here	
    	CDC MemDC;
    	// Create a memory device compatible with the above CPaintDC variable
    	MemDC.CreateCompatibleDC(&dc);
    	Bitmap * test = Bitmap::FromFile(_T("c:\\image.bmp"));
     
    	// Select the new bitmap	
    	HGDIOBJ prevObj = MemDC.SelectObject(test);
     
    	// Copy the bits from the memory DC into the current dc
    	CRect rect;
    	this->GetClientRect(&rect);
    	dc.BitBlt(0, 0, rect.Width(), rect.Height(), &MemDC, 0, 0, SRCCOPY);
     
    	// Restore the old bitmap	
    	dc.SelectObject(prevObj);

    Une idée de pourquoi la seconde version n'affiche rien ?

  2. #2
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut reponse
    en fait, je viens de trouver...
    le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    CPaintDC dc(this); // device context for painting
     
    	// TODO: Add your message handler code here	
    	CDC MemDC;
    	// Create a memory device compatible with the above CPaintDC variable
    	MemDC.CreateCompatibleDC(&dc);
    	Bitmap * test = Bitmap::FromFile(_T("c:\\image.bmp"));
     
    	HBITMAP hbmp;
    	test->GetHBITMAP( Color::Red, &hbmp );
     
    	// Select the new bitmap	
    	HGDIOBJ prevObj = MemDC.SelectObject(hbmp);
     
    	// Copy the bits from the memory DC into the current dc
    	CRect rect;
    	this->GetClientRect(&rect);
    	dc.BitBlt(0, 0, rect.Width(), rect.Height(), &MemDC, 0, 0, SRCCOPY);
     
    	// Restore the old bitmap	
    	dc.SelectObject(prevObj);
    Le SelectObject est fait sur le HBitmap, et l'image s'affiche bien.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Note: Pense à détruire le bitmap après utilisation.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Adrien26 as tu résolu ton problème alors ?
    Oui comme le dit Medinoc appelle bien DeleteObject c'est très important sinon tu vas allouer des objets GDI en trop..

Discussions similaires

  1. Probleme affichage de mon site
    Par Braq dans le forum Webdesign & Ergonomie
    Réponses: 15
    Dernier message: 10/08/2005, 14h08
  2. problem affichage avec HTML::TableExtract
    Par rootdaoud dans le forum Web
    Réponses: 2
    Dernier message: 04/07/2005, 19h35
  3. Probleme affichage noir quand Build/Compile
    Par balabi dans le forum MFC
    Réponses: 3
    Dernier message: 01/06/2005, 16h12
  4. Réponses: 2
    Dernier message: 18/03/2005, 08h32
  5. Probleme affichage dans tableau selon requête
    Par moulette85 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 01/03/2005, 15h44

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