将透明位图添加到 Windows 按钮

Posted

技术标签:

【中文标题】将透明位图添加到 Windows 按钮【英文标题】:Adding a transparent bitmap to a windows button 【发布时间】:2010-05-04 11:42:35 【问题描述】:

我已经有一段时间没有这样做了,但我正在尝试将自定义按钮图形添加到 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 是默认透明值),但到目前为止还没有快乐....

【问题讨论】:

可能被骗***.com/questions/261559/… ? 【参考方案1】:

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

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

【讨论】:

以上是关于将透明位图添加到 Windows 按钮的主要内容,如果未能解决你的问题,请参考以下文章

Windows/C++ -- 将图标渲染为具有透明度的位图

画透明位图

从位图和透明度颜色创建蒙版 - Windows GDI

Windows窗体按钮背景透明

Windows界面编程第五篇 静态控件背景透明化

将位图添加到 MFC 中的按钮