在本机 Win32 GDI 中绘制略微透明的蓝色矩形

Draw Slightly Transparent Blue Rectangle in Native Win32 GDI

本文关键字:透明 蓝色 色矩 Win32 本机 GDI 绘制      更新时间:2023-10-16

如何在本机 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);

我很确定你需要 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);

从好的方面来说,GDI+ 虽然速度不快,但具有更强的功能和视觉效果,并且是面向对象的,这也意味着您无需担心所有这些SelectObjectDeleteObject调用。

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

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

你需要使用 AlphaBlend 函数 -
http://msdn.microsoft.com/en-us/library/windows/desktop/dd183351(v=vs.85).aspx
http://www.codeproject.com/Articles/286/Using-the-AlphaBlend-function