Comment dessiner du texte avec un fond transparent à l'aide de c++/WinAPI?
Comment dessiner du texte avec la couleur de transparence de l'aide WinAPI?
De manière habituelle, j'ai utilisé SetBkMode(hDC, TRANSPARENT), mais maintenant, j'ai besoin d'utiliser de double tampon.
De cette façon, les images attire correcte, mais le texte ne s'appuie pas correct (avec un fond noir).
case WM_PAINT:
{
hDC = BeginPaint(hWnd, &paintStruct);
SetBkMode(hDC, TRANSPARENT);
HDC cDC = CreateCompatibleDC(hDC);
HBITMAP hBmp = CreateCompatibleBitmap(hDC, width, height);
HANDLE hOld = SelectObject(cDC, hBmp);
HFONT hFont = (HFONT)SelectObject(hDC, font);
SetTextColor(cDC, color);
SetBkMode(cDC, TRANSPARENT);
TextOut(cDC, 0, 0, text, wcslen(text));
SelectObject(cDC, hFont);
BitBlt(hDC, 0, 0, width, height, cDC, 0, 0, SRCCOPY);
SelectObject(cDC, hOld);
DeleteObject(hBmp);
DeleteDC(cDC);
EndPaint(hWnd, &paintStruct);
return 0;
}
Vous devez vous connecter pour publier un commentaire.
Lorsque vous créez une image, la couleur n'est pas spécifié. La documentation n'est pas comment il est initialisé, mais solide noir (tous les zéros) semble probable. Puisque vous êtes le dessin, le texte sur l'image, l'arrière-plan de l'image reste noir. Ensuite, vous copiez l'image entière de la DC et de tous les pixels à venir, l'arrière-plan avec le texte.
Pour corriger cela, vous devez copier l'arrière-plan dans l'image bitmap avant de dessiner le texte.
SetBkMode(dc, TRANSPARENT)
devrait fonctionner encore. Assurez-vous que vous utilisez le bon DC poignée lors de l'élaboration de votre tampon d'arrière-plan.