Comment dessiner du texte à l'aide de la CDC avec un fond transparent sur CBitmap?

J'ai le code suivant qui fonctionne à condition de masque à la rose pixels cependant, ce que je veux réellement transparente bits comme un fichier PNG pour que je puisse éviter le mélange alpha questions et la nécessité de masquer une couleur spécifique partout l'image bitmap sera utilisé.

CClientDC dc(pWnd);
CDC memDC;

if(!memDC.CreateCompatibleDC(&dc))
   return NULL;

CRect bitmapRect;
bitmapRect.SetRectEmpty();

CFont* pOldFont = memDC.SelectObject(pWnd->GetFont());
CSize fontSize = memDC.GetTextExtent(imageText);

bitmapRect.right = fontSize.cx;
bitmapRect.bottom = fontSize.cy;

CBitmap bitmap;
if(!bitmap.CreateCompatibleBitmap(&dc, bitmapRect.Width(), bitmapRect.Height()))
   return NULL;

CBitmap* pOldMemDCBitmap = memDC.SelectObject(&bitmap);

memDC.FillSolidRect(&bitmapRect, RGB(255,0,255));
//memDC.SetBkMode(TRANSPARENT); //doesn't work
//memDC.SetBkColor(TRANSPARENT); //doesn't work
memDC.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));

//memDC.DrawText(imageText, bitmapRect, DT_TOP|DT_LEFT|DT_NOCLIP); //same difference
memDC.TextOut(0, 0, imageText);

memDC.SelectObject(pOldMemDCBitmap);
memDC.SelectObject(pOldFont);
memDC.DeleteDC();

CImageList bmImage;
bmImage.Create(bitmapRect.Width(), bitmapRect.Height(), ILC_COLOR32|ILC_MASK, 0, 1);
//this masks out the pink but for some windows blends edges of text causing pink text instead of black!
bmImage.Add(&bitmap, RGB(255,0,255));

Est juste le bug rempli bête que le MFC est défaillante ou ai-je raté quelque chose?

  • IIRC SetBkMode(TRANSPARENT) devrait faire l'affaire. Vous n'avez pas, par hasard, seulement essayer y compris en ligne en combinaison avec le prochain appel à SetBkColor(TRANSPARENT) (où il aurait présumément interpréter la constante TRANSPARENT comme de la couleur de la valeur, et peut-être remplacer la transparence mode)...?
  • Pas de ceux qui sont mutuellement exclusifs seulement des restes de choses que j'ai essayé ... je pense que je viens de comprendre mon problème, mais les tests avant de me mettre à jour ou de poster une réponse.
InformationsquelleAutor AJG85 | 2011-10-04