c++ - 透明椭圆

标签 c++ gdi geometry drawellipse

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

最佳答案

借自Fill an ellipse in C++ :

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

因此,需要设置一个透明的笔刷。为此,使用 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;
}

关于c++ - 透明椭圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6086024/

相关文章:

c++ - Windows下C++代码同步API失败

c++ - 如何在 GDI 中转换一个简单的位图

c++ - C++画矩形的函数

html - 如何创建具有统一笔划宽度的 SVG 多边形?

c++ - 在 C++14 类的私有(private)部分中声明时,默认参数和成员初始化之间哪一个最好?

c++ - 你能在 Cocoa (Obj-C) 项目中使用 C++ 库吗?

c - 如何使用GDI将RGB位图绘制到窗口?

visual-c++ - 拥有像 MM_LOMETRIC 和 MM_LOENGLISH 这样的度量映射模式有什么意义?

python - 球体表面点的均匀分布?

C++ 获取缓冲区的二进制值