我已经有一段时间没有这样做了,但我正在尝试将自定义按钮图形添加到 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/