我知道这个问题已经被问过很多次了,但我想具体说明一下。我得到一张图片,它显示一个蓝色圆圈 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;
}
这里我收到一条消息:此控件不支持透明色
好的,那我该怎么做呢? 谢谢
最佳答案
在 WPF 和 win32 中,控件或子窗口一般不能有颜色透明度。
但它们可以有一个非矩形区域。任何形状,包括孔。
使用控件的region property改变它的区域。此链接中有一个关于如何绘制圆形按钮的示例。
仅供引用,区域外的像素不会收到任何消息/通知。
疯狂形状的控件示例:
- 按钮形状像一个人的头。
- 螺旋形。
- 3 个互不接触的三角形。
- 棋盘 - 每 2 个像素都是透明的。
此外,区域是动态的,可以在创建对象后更改,因此您的按钮可以增大和缩小...
它也相当快。
限制:
- 无 alpha 混合 - 不透明或完全透明。
我编写了一个函数 (C++/win32),它接受一个控件和一个 BMP,两者具有相同的大小,扫描 BMP 以寻找“透明”颜色(您决定哪种颜色)并从中删除该颜色的所有像素控制区。这大约是半屏代码。
关于c++ - Visual C++ 按钮的透明背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20620101/