C++ visualc&x2B+;按钮的透明背景色

C++ visualc&x2B+;按钮的透明背景色,c++,image,button,colors,transparent,C++,Image,Button,Colors,Transparent,我知道这个问题已经问过很多次了,但我想具体说明一下。我得到了一个图像,它显示了一个蓝色的X圆圈,我想在Windows应用程序窗体中创建我自己的退出按钮 为此,我在表单中添加了一个按钮,并将图像加载到按钮上。但是,按钮的背景色会破坏图像,因为它是灰色的。所以我试过: private: System::Void button1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {

我知道这个问题已经问过很多次了,但我想具体说明一下。我得到了一个图像,它显示了一个蓝色的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;
    }
这里我得到一条消息:这个控件不支持透明颜色

好吧,那我该怎么做?
谢谢

背景
-属性设置为透明:

btn->Background = System::Drawing::Color::Transparent;
顺便说一下,不要在绘制处理程序中执行此操作。相反,在构造函数或任何初始化函数中执行此操作

更新: 好的,明白了-这是一个Windows窗体应用程序。请参阅此链接以获取解决问题的一些方法


另一种可能性(我以前在项目中使用过)是使用
图片盒
,听
鼠标点击事件。

在WPF和win32中,控件或子窗口通常不能有颜色透明度

但它们可以有一个非矩形区域。任何形状,包括孔

使用控件的区域更改其区域。本链接中有一个关于如何绘制圆形按钮的示例

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

疯狂形状控件的示例:

  • 形状像人头的纽扣
  • 螺旋形
  • 3个彼此不接触的三角形
  • 棋盘-每2个像素是透明的
  • 此外,区域是动态的,可以在对象创建后更改,因此您的按钮可以增长和收缩

    它也相当快

    限制:

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

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

    你的代码是C++ + CLI而不是C++。请适当地标记你的问题。C++ VisualStudio,Windows应用程序的形式不会使你的代码比几分钟前的C++低,这会引起同样的错误:这个控件不支持透明的颜色,意思是按钮(在公开的Frime1函数中测试),我也可以做一个多边形按钮吗?就像屏幕顶部的按钮一样:任何形状,我指的是任何形状:)。我将在答案中添加一些示例