c++ - 将透明位图添加到 Windows 按钮

标签 c++ windows winapi sdk

我已经有一段时间没有这样做了,但我正在尝试将自定义按钮图形添加到 Windows 按钮,其中有一些透明区域。我尝试了各种方案,但似乎无法显示透明区域。这是我的代码:

hbmpUpDisabled = LoadImage(instance,MAKEINTRESOURCE(IDB_UPARROWDISABLED), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS );

SendMessage(GetDlgItem(hWndDlg, IDC_MOVEUP),BM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hbmpUpDisabled);

有人注意到这里有什么问题吗?如果我的位图是 1 位位图,它就可以工作。我无法让 32 位位图工作,而且我不确定如何设置 24 位或 8 位位图来做到这一点....我尝试了自定义 255,0,255 颜色(IIRC 默认透明值),但到目前为止还没有快乐....

最佳答案

LR_LOADMAP3DCOLORS 应将源图像中的灰色映射到当前按钮表面颜色。按钮不使用 AlphaBlt 或 TransparentBlt,因此实际上(缺少自定义绘画)无法将具有透明或 alpha 区域的位图设置到按钮上并期望它起作用。您只需预先准备背景区域具有正确按钮颜色的位图。

  • 就是说 - 我怀疑对于由通用控件 v6 实现的按钮来说,其中一些限制可能会被取消。将 commctl 6 作为依赖程序集添加到您的 exe 并查看行为是否发生变化。

关于c++ - 将透明位图添加到 Windows 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2764940/

相关文章:

c++ - 在 C++ 中子类化时为什么有时需要向重写的函数添加 virtual 关键字?

windows - 适用于 Windows 的 Git Bash 显示/预期文件路径带有正斜杠,没有驱动器冒号

c - 有没有办法通过名称获取 Windows 中当前进程的函数?

c - 未定义的 Windows 引用 _ftprintf

windows - Windows 到底是什么版本?

c++ - 从样板代码到模板实现

c++ - 锁定取消引用的互斥量是不好的行为吗?

c++ - 将任意类的成员函数指针存储为类实例变量

c++ - IDWriteFactory::GetSystemFontCollection 不会提供字体变体

windows - IDE 崩溃后读取控制台应用程序的标准输出