将透明位图添加到Windows按钮

时间:2010-05-04 11:42:35

标签: 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是默认透明的价值),但到目前为止还没有快乐....

1 个答案:

答案 0 :(得分:2)

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

  • 那就是说 - 我怀疑这些限制可能会被普通控件v6实现的按钮取消。将commctl 6作为dependend程序集添加到您的exe,并查看行为是否更改。