C++ win32 c++;具有透明图像的所有者绘制按钮

C++ win32 c++;具有透明图像的所有者绘制按钮,c++,winapi,button,transparency,ownerdrawn,C++,Winapi,Button,Transparency,Ownerdrawn,我已经在我的win32应用程序中实现了一个所有者绘制按钮(没有MFC)。该按钮是一个普通的20x20位图(带透明度的圆形图标)。问题是,按钮位于实心背景上,我可以看到按钮的灰色背景(因为位图是圆形的)。我试着用空画笔回应WM_CTLCOLORBTN,但没有运气。。我尝试过使用位图和ico文件显示按钮,但没有改变。。有人知道如何解决这个问题吗 这是我的问题,设置图标的边缘应该是透明的(不是白色/灰色) 听起来好像你在尝试制作一个非矩形控件 您可以打电话告诉Windows您的控件是非矩形的。听起来好

我已经在我的win32应用程序中实现了一个所有者绘制按钮(没有MFC)。该按钮是一个普通的20x20位图(带透明度的圆形图标)。问题是,按钮位于实心背景上,我可以看到按钮的灰色背景(因为位图是圆形的)。我试着用空画笔回应WM_CTLCOLORBTN,但没有运气。。我尝试过使用位图和ico文件显示按钮,但没有改变。。有人知道如何解决这个问题吗

这是我的问题,设置图标的边缘应该是透明的(不是白色/灰色)


听起来好像你在尝试制作一个非矩形控件


您可以打电话告诉Windows您的控件是非矩形的。

听起来好像您正在尝试创建非矩形控件


你可以打电话告诉Windows你的控件是非矩形的。

除了@joel的答案之外,如果你想让某个区域透明化,在你想透明化的区域使用一些图像编辑器(主要使用RGB(0xFF,0x00,0xFF)),那么除了@joel的答案之外,还可以使用,如果要使某个区域透明,请使用一些图像编辑器(主要使用RGB(0xFF,0x00,0xFF))在要透明的区域中放置一种独特的颜色,然后使用

你说这是一个实心背景,但你的图像显示某种橙黄色渐变作为背景。如果它确实是标准的windows按钮纯色,则可以使用LR_LoadMap3DColor或LR_LOADTRANSPARENT加载带有LoadImage的位图。因为你有一个渐变,你将不得不使用更复杂的技术来掩盖位图。

您说这是一个坚实的背景,但您的图像显示了某种橙黄色渐变作为背景。如果它确实是标准的windows按钮纯色,则可以使用LR_LoadMap3DColor或LR_LOADTRANSPARENT加载带有LoadImage的位图。因为你有一个渐变,你将不得不使用更复杂的技术来掩盖位图。

你到底想做什么?制作一个完全不可见的按钮?不,这是一个设置按钮。。由于它是一个圆形的图标,我可以看到边缘的灰色背景。这很不清楚,但听起来你得到了你想要的。图像在按钮的背景下是透明的。如果你真的想让它在父母的背景下透明,那么你需要对WS_EX_透明样式位进行争论。添加一个屏幕截图来明确问题所在。你到底想做什么?制作一个完全不可见的按钮?不,这是一个设置按钮。。由于它是一个圆形的图标,我可以看到边缘的灰色背景。这很不清楚,但听起来你得到了你想要的。图像在按钮的背景下是透明的。如果你真的想让它在父母的背景下透明,那么你需要对WS_EX_透明样式位进行争论。添加了一个屏幕截图来澄清问题所在。使用transparnetBlt函数不起作用(仍然必须删除默认的按钮背景)。因此,我组合了TransparentBlt,并在WM_CTLCOLORBTN消息上返回了一个空心画笔,这就成功了。使用TransparentBlt函数不起作用(仍然必须删除默认的按钮背景)。因此,我结合了TransparentBlt,并在WM_CTLCOLORBTN消息上返回了一个空心画笔,这就成功了。