如何使用c++/WinAPI绘制透明背景的文本?

2024-03-22

如何使用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;
}

SetBkMode(dc, TRANSPARENT)应该仍然可以正常工作。确保在绘制到后台缓冲区时使用正确的 DC 句柄。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用c++/WinAPI绘制透明背景的文本? 的相关文章

随机推荐