4

你如何用 GDI 画一个透明的椭圆?我试过SetBkMode()了,但我仍然得到一个白色的椭圆 bk。

case WM_PAINT:
{
    hdc = BeginPaint(hwnd, &ps);
    SetBkMode(hdc, TRANSPARENT); // doesnt work
    Ellipse(hdc, 0,0,500,500);
    EndPaint(hwnd, &ps);
    break;
}
4

1 回答 1

14

借自Fill an ellipse in C++

椭圆使用当前笔勾勒出轮廓,并使用当前画笔填充

因此,您需要设置一个透明画笔。为此,请使用GetStockObject(HOLLOW_BRUSH)它来获取它并SelectObject()为给定的设备上下文激活它。所以你的代码可以是这样的:

case WM_PAINT:
{
    hdc = BeginPaint(hwnd, &ps);
    SelectObject(hdc, GetStockObject(HOLLOW_BRUSH));
    Ellipse(hdc, 0,0,500,500);
    EndPaint(hwnd, &ps);
    break;
}
于 2011-05-22T05:50:30.453 回答