如何使用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;
}
答案 0 :(得分:16)
SetBkMode(dc, TRANSPARENT)
应该可以正常工作。在绘制到后缓冲区时,请确保使用正确的DC手柄。
答案 1 :(得分:2)
创建位图时,未指定颜色。文档没有说明它是如何初始化的,但看起来很可能是纯黑色(全零)。由于您在位图上绘制文本,因此位图的背景保持黑色。然后,将整个位图复制到DC,所有像素都会出现,背景和文本一起出现。
要解决此问题,您必须在绘制文本之前将所需背景复制到位图中。