我知道这个问题已经被问过很多次了,但是我想说明一下。我有一个图像,显示一个蓝色圆圈X,我想在Windows应用程序表单中创建自己的退出按钮。
为此,我在表单中添加了一个按钮,并将图像加载到按钮上。但是,按钮的背景颜色会破坏图像,因为它是灰色的。所以我试过了:
private: System::Void button1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e) {
this->TransparencyKey = BackColor;
}
这根本不起作用(背景颜色仍为灰色)。所以我试过这个:
private: System::Void button1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e) {
this->BackColor = System::Drawing::Color::Transparent;
}
我收到一条消息:此控件不支持透明色
好的,我怎么会这样做? 感谢
答案 0 :(得分:1)
将Background
- 属性设置为透明:
btn->Background = System::Drawing::Color::Transparent;
顺便说一下,不要在Paint-Handler中执行此操作。相反,在构造函数或任何初始化函数中执行此操作。
<强>更新强> 好的,得到它 - 它是一个Windows窗体应用程序。有关您的问题的解决方案,请参阅此C# Windows Form Application Transparent button链接。
另一种可能性(我之前在项目中使用过)可能是使用PictureBox
而是听取MouseClick
- 事件。
答案 1 :(得分:1)
在WPF和win32中,控件或子窗口通常不具有颜色透明度。
但他们可以有一个非矩形区域。任何形状,包括洞。
使用控件的region property更改其区域。这个链接中有一个关于如何绘制圆形按钮的例子。
仅供参考,区域外的像素不接收任何消息/通知。
疯狂形状控件的例子:
此外,一个区域是动态的,可以在创建对象后更改,因此您的按钮可以增长和缩小......
它也很快。
<强>限制:强>
我写了一个函数(C ++ / win32),它接受一个控件和一个BMP,两者都有相同的大小,扫描BMP的“透明”颜色(你决定哪种颜色)并从中删除该颜色中的所有像素控制区域。这大约是半屏代码。