Search code examples
c++gdigeometrydrawellipse

Transparent Ellipse


How do you draw a transparent ellipse with GDI? I tried SetBkMode() but I still get a white ellipse bk.

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

Solution

  • Borrowed from Fill an ellipse in C++:

    The ellipse is outlined by using the current pen and is filled by using the current brush.

    Therefore, you need to set a transparent brush. For that, use GetStockObject(HOLLOW_BRUSH) to obtain it and SelectObject() to activate it for a given device context. So your code can be like this:

    case WM_PAINT:
    {
        hdc = BeginPaint(hwnd, &ps);
        SelectObject(hdc, GetStockObject(HOLLOW_BRUSH));
        Ellipse(hdc, 0,0,500,500);
        EndPaint(hwnd, &ps);
        break;
    }