在Native Win32 GDI中绘制稍微透明的蓝色矩形

saz*_*azr 5 c++ winapi gdi

如何在Native Win32 C++中绘制alpha /透明度值为0.5(即50%透明度)的蓝色矩形?

使用像RGBA()这样的宏失败,我不知道如何指定画笔的alpha值.

SetDCPenColor(hdc, RGBA(255,255,0,127));
SetDCBrushColor(hdc, RGBA(255,255,0,127));
Rectangle(hdc, 0, 0, width, height);
Run Code Online (Sandbox Code Playgroud)

chr*_*ris 6

我很确定你需要GDI +这样做,但它应该与GDI一起:

//in rendering function
using namespace Gdiplus;
Graphics g (hdc);
SolidBrush brush (Color (127 /*A*/, 0 /*R*/, 0 /*G*/, 255 /*B*/));
g.FillRectangle (&brush, 0, 0, width, height);
Run Code Online (Sandbox Code Playgroud)

从好的方面来说,GDI +虽然不是那么快,但它具有更强的功能和视觉效果,并且是面向对象的,这也意味着你不必担心所有这些SelectObjectDeleteObject调用.

请注意,在初始化/结束程序以使用GDI +时,还有一些额外的步骤,并且所有内容都在Gdiplus命名空间中,并且-lgdiplus.

如果你真的需要GDI,我所知道的唯一解决方案是AlphaBlend,它实际上是一种比简单地将形状绘制到设备上下文更复杂的方法.开始使用GDI +总是好的,因为它仍然在使用,并且比GDI更容易使用.