Visual C++按钮的透明背景色

Visual C++ Transparent BackColor of Button

本文关键字:透明 背景色 按钮 C++ Visual      更新时间:2023-10-16

我知道这个问题已经被问了很多次了,但我想具体说明。我得到了一张图片,上面显示了一个蓝色的圆圈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属性可以更改其区域。这个链接中有一个关于如何绘制圆形按钮的示例。

仅供参考,区域外的像素没有收到任何消息/通知。

疯狂形状控件示例:

  1. 形状像人头的纽扣
  2. 螺旋形状
  3. 3个相互不接触的三角形
  4. 棋盘-每2个像素是透明的

此外,区域是动态的,可以在创建对象后更改,因此您的按钮可以增长和收缩。。。

它也很快。

限制:

  • 无alpha混合-不透明或完全透明

我写了一个函数(C++/win32),它接受一个控件和一个BMP,两者都有相同的大小,扫描BMP以寻找"transparent"颜色(由您决定哪种颜色),并从控件区域中删除该颜色的所有像素。这大约是半个屏幕的代码。

Background-属性设置为Transparent:

btn->Background = System::Drawing::Color::Transparent;

顺便说一句,不要在"绘制处理程序"中执行此操作。相反,可以在构造函数或任何初始化函数中执行。

更新:好的,明白了,这是一个Windows窗体应用程序。有关问题的一些解决方案,请参阅此C#Windows窗体应用程序透明按钮链接。

另一种可能性(我以前在项目中使用过)是使用PictureBox,并监听MouseClick-事件。