Visual C++按钮的透明背景色
Visual C++ Transparent BackColor of Button
我知道这个问题已经被问了很多次了,但我想具体说明。我得到了一张图片,上面显示了一个蓝色的圆圈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属性可以更改其区域。这个链接中有一个关于如何绘制圆形按钮的示例。
仅供参考,区域外的像素没有收到任何消息/通知。
疯狂形状控件示例:
- 形状像人头的纽扣
- 螺旋形状
- 3个相互不接触的三角形
- 棋盘-每2个像素是透明的
此外,区域是动态的,可以在创建对象后更改,因此您的按钮可以增长和收缩。。。
它也很快。
限制:
- 无alpha混合-不透明或完全透明
我写了一个函数(C++/win32),它接受一个控件和一个BMP,两者都有相同的大小,扫描BMP以寻找"transparent"颜色(由您决定哪种颜色),并从控件区域中删除该颜色的所有像素。这大约是半个屏幕的代码。
将Background
-属性设置为Transparent:
btn->Background = System::Drawing::Color::Transparent;
顺便说一句,不要在"绘制处理程序"中执行此操作。相反,可以在构造函数或任何初始化函数中执行。
更新:好的,明白了,这是一个Windows窗体应用程序。有关问题的一些解决方案,请参阅此C#Windows窗体应用程序透明按钮链接。
另一种可能性(我以前在项目中使用过)是使用PictureBox
,并监听MouseClick
-事件。
相关文章:
- 如何在全屏模式下(在OpenGL中)使背景透明
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- dx11 渲染到纹理仅显示透明颜色
- SDL2 透明背景
- 如何创建透明垫子
- 如何创建子窗口是透明的,父窗口是不透明的?
- Ncurses C++打印前景色/背景色交换的文本
- 在设置QStylesHeet之后,如何获得Qwidget背景色
- 如何设置 RTF 编辑控件的背景色
- Visual C++按钮的透明背景色
- 更改MFC中CListCtrl整列的背景色
- 使用 QPropertyAnimation 更改 QPushButton 的背景色
- 在 Linux 上使用 ncurses 的背景色
- 在给定前景色和背景色的情况下,我如何计算第三种颜色
- 获取窗口的背景色
- c++ Win32单选按钮背景色
- 尝试使用GetObject();获取默认背景色
- 如何在QTableView中设置一些特殊行的背景色
- 在PDCurses中设置整个窗口的背景色
- 更改编辑控件的背景色的困难