12

WinAPIを使用して透明色でテキストを描画するには? 通常は SetBkMode(hDC, TRANSPARENT) を使用していましたが、今回はダブル バッファを使用する必要があります。この方法では、画像は正しく描画されますが、テキストは正しく描画されません (黒い背景で)。

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;
}
4

2 に答える 2

18

SetBkMode(dc, TRANSPARENT)まだ正常に動作するはずです。バックバッファに描画するときは、正しいDCハンドルを使用していることを確認してください。

于 2012-09-18T14:58:13.120 に答える
3

ビットマップを作成するとき、色は指定されません。ドキュメントには初期化方法は記載されていませんが、黒一色 (すべてゼロ) の可能性が高いようです。ビットマップ上にテキストを描画しているため、ビットマップの背景は黒のままです。次に、ビットマップ全体を DC にコピーすると、すべてのピクセル、背景、テキストが一緒にコピーされます。

これを修正するには、テキストを描画する前に目的の背景をビットマップにコピーする必要があります。

于 2012-09-18T15:47:52.233 に答える