سؤال

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;
}
هل كانت مفيدة؟

المحلول

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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top