c++ - Visual C++ 按钮的透明背景颜色

标签 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;
    }

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

好的,那我该怎么做呢? 谢谢

最佳答案

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

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

使用控件的region property改变它的区域。此链接中有一个关于如何绘制圆形按钮的示例。

仅供引用,区域外的像素不会收到任何消息/通知。

疯狂形状的控件示例:

  1. 按钮形状像一个人的头。
  2. 螺旋形。
  3. 3 个互不接触的三角形。
  4. 棋盘 - 每 2 个像素都是透明的。

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

它也相当快。

限制:

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

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

关于c++ - Visual C++ 按钮的透明背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20620101/

相关文章:

.net - 如何停止单击两次 Windows 窗体按钮

css - 使用 :first-letter pseudo-element on input button

javascript - JQuery按钮每次点击,显示/隐藏表单

c# - 将进程内 COM 服务器对象添加到 C# 应用程序

c++ - 查找前K个频繁词

asp.net-mvc - 在哪里存储 asp.net mvc 项目的图像以及如何从 site.master 引用它们

javascript - HTML 生成图像链接?

c++ - 打开多个文件,替代 fopen()

c++ - 即使在将新字符串复制到现有字符串后,旧包含也可用(在某些索引处)

PHP 文件托管