Gewusst wie: zeichnen von text mit transparentem hintergrund mit c++/WinAPI?
How to draw text mit transparenten Farben mit der WinAPI?
In der üblichen Weise, die ich verwendet SetBkMode(hDC, TRANSPARENT), aber jetzt muss ich mit einem doppelten Puffer.
Auf diese Weise Bilder zieht richtig, aber der text zieht nicht richtig (mit schwarzem hintergrund).
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;
}
InformationsquelleAutor Alexander | 2012-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine bitmap erstellen, die Farbe ist nicht angegeben. Die Dokumentation nicht, wie es initialisiert wird, aber einfarbig schwarz (alle Nullen) scheint wahrscheinlich. Da Sie gerade zeichnen, den text auf das Bild, den hintergrund der bitmap bleibt schwarz. Anschließend kopieren Sie die gesamte bitmap in den DC und alle Pixel zusammen, der hintergrund zusammen mit dem text.
Dieses Problem zu beheben, müssen Sie kopieren Sie den gewünschten hintergrund in die bitmap, bevor Sie ziehen Sie den text.
InformationsquelleAutor Mark Ransom
SetBkMode(dc, TRANSPARENT)
sollte funktionieren immer noch. Stellen Sie sicher, dass Sie mit den richtigen DC-handle, wenn die Zeichnung auf den back buffer.Sie müssen, um es für die gleiche DC, die Sie zeichnen, text. Die text-Zeichnungs-API rufen Sie an? Welche Art von DC-und bitmap-werden Sie die Zeichnung auf?
Was ich Tue: erstellen kompatibel dc erstellen, der kompatibel bitmap, wählen Sie Objekt, setbkmode, zeichnen, (kompatibel mit dc), bitblt, wählen Sie Objekt löschen Objekt löschen dc. Bilder zieht richtig, aber der text zieht mit schwarzem hintergrund((
Vielleicht sollten Sie Bearbeiten Ihre Frage und liefern minimale code, der das problem veranschaulicht. Es ist nur zu raten, an dieser Stelle.
InformationsquelleAutor tenfour