c++ - 在 native Win32 GDI 中绘制稍微透明的蓝色矩形

标签 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);

最佳答案

我很确定您需要 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 调用。

请注意,有几个 extra steps在初始化/结束程序以使用 GDI+ 时,所有内容都在 Gdiplus 命名空间和 -lgdiplus 中。

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

关于c++ - 在 native Win32 GDI 中绘制稍微透明的蓝色矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10966008/

相关文章:

java - Android C++ NDK 示例未更新

c++ - Win32 C/C++ - 检测是否安装了 IPv6

c++ - spy++如何找出屏幕上某一点的窗口是什么?

c++ - decltype 不推导 const 对象的 const 成员

c++ - 使用 vector 和 pthreads 的不一致计数

c# - 自定义控件边框不显示是否调用 Update(),但显示是否调用 Refresh()

c - 是否可以创建像 DrawFocusRect() 这样的 XOR 笔?

c++ - 2 名游戏玩家之间的行为不一致

C++11 constexpr 函数编译器错误与三元条件运算符 (? :)

c++ - 为什么 GetSystemTimes #if'd 在 winbase.h 之外?