Visual C ++ Button的BackColor

时间:2013-12-16 20:18:27

标签: c++ image button colors transparent

我知道这个问题已经被问过很多次了,但是我想说明一下。我有一个图像,显示一个蓝色圆圈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;
    }

我收到一条消息:此控件不支持透明色

好的,我怎么会这样做? 感谢

2 个答案:

答案 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更改其区域。这个链接中有一个关于如何绘制圆形按钮的例子。

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

疯狂形状控件的例子:

  1. 按钮形状像人的头部。
  2. 螺旋形状。
  3. 3个不相互接触的三角形。
  4. 棋盘 - 每隔一个像素都是透明的。
  5. 此外,一个区域是动态的,可以在创建对象后更改,因此您的按钮可以增长和缩小......

    它也很快。

    <强>限制:

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

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