Image transparante sans font fixe

Signaler
Messages postés
83
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
12 octobre 2005
-
Messages postés
91
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
12 octobre 2006
-
Bon voilà j'essai depuis quelque temps de faire en sorte que mon bitmap
sois transparent. J'ai réussi mais le problème c'est que pour le moment
je dois utiliser un font fixe. A la basse sa cause aucun problème, mais
si je met des statics, ou autre composante de windows et bien sa
clignote (du au fait que le DC est afficher par dessus).



J'ai penser faire un PrintScreen de ma fenêtre pour que le statics y sois présent et comme cela on vera pas de clignotement.



Si vous avez des idées :)



Note: On peut ce référer a la source http://www.cppfrance.com/code.aspx?id=22723 pour un bitmap transparent.

------------------------------------------
Votre dévoué posseur de question :D

4 réponses

Messages postés
91
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
12 octobre 2006

Salut,



En fait, tu peut régler ton problème en faisant du "double
buffer" (je crois que ca s'appel comme ca). J'avais le meme problème et
je l'ai résolu grace à ca. Grossomodo, tu fait :

//----------------------------------------------------------------------------------------------------------

void CTonAppliView::OnDraw(CDC* pDC)

{

....



CDC
MemDCF;



CBitmap MemBmpF;





MemDCF.CreateCompatibleDC(pDC);



MemBmpF.CreateCompatibleBitmap(pDC,RFace.Width (),RFace.Height
());


CBitmap
*pOldBitmap = MemDCF.SelectObject(&MemBmpF);

//-----------------------------------------------------------------------------------------------------------

//tu travaille sur le MemDCF

//-----------------------------------------------------------------------------------------------------------

//tu envoie la totalité de ton dessin vers le DC de l'écran


pDC->BitBlt
(0,0,RFace.Width (),RFace.Height (),&MemDCF,0,0,SRCCOPY);



MemDCF.SelectObject(pOldBitmap);



DeleteDC(MemDCF);



//----Voili voilou
Messages postés
91
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
12 octobre 2006

j'ai oublié de préciser que RFace est un CRect
Messages postés
83
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
12 octobre 2005

Le double buffer est utiliser contre le clignotement de l'image (ex si tu dois dessiner beaucoup de chose en peu de temp).

Sinon pour l'effet de trasparance je peut utiliser SRCPAINT (si je me trompe pas) sa peut sensiblement faire de la transparance au détriment du noir qui serra effacer.

Sinon je crois que je vais devoir capturer le HDC de la fenêtre puis redesinner par dessus et afficher.

------------------------------------------
Votre dévoué posseur de question :D
Messages postés
91
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
12 octobre 2006

Ca peut peut-être t'aider (c'est pas de moi mais de petzold):



// Select bitmaps into memory DCs





hdcMemImag = CreateCompatibleDC (hdc) ;


SelectObject (hdcMemImag, hBitmapImag) ;

hdcMemMask = CreateCompatibleDC (hdc) ;

SelectObject (hdcMemMask, hBitmapMask) ;





// Do the bitblts

BitBlt (hdc, x, y, cxBitmap, cyBitmap, hdcMemMask, 0, 0, 0x220326) ;

BitBlt (hdc, x, y, cxBitmap, cyBitmap, hdcMemImag, 0, 0, SRCPAINT) ;





DeleteDC (hdcMemImag) ;


DeleteDC (hdcMemMask) ;