为什么Winforms控件不支持半透明的背景颜色
来源:互联网 发布:电脑控制手机桌面软件 编辑:程序博客网 时间:2024/06/06 07:40
在Winforms的所有控件中,只有Form和ToolStripDropDown支持Opacity属性。当Opacity属性的值为0时,为完全透明;当值为1时,则为完全不透明;当值在0和1之间时,则显示出半透明的效果。
那么为什么其他控件不能实现半透明的效果呢?当我们深入到Winform的内部代码去分析Opacity的内部实现的时候,我们发现半透明效果需要控件支持WS_EX_LAYERED。从MSDNhttp://msdn.microsoft.com/en-us/library/ms632680(VS.85).aspx上我们发现WS_EX_LAYERED不能用于子窗口(Child Window)上。Form不能成为其他窗口的子窗口,而ToolStripDropDown只有在TopLevel为true的时候Opacity才有效,此时窗口的类型是pop-up而不是child类型。因此这两个类型的空间支持Opacity属性。而其他所有空间在创建的时候都用了WS_CHILD类型,都属于Child窗口,所以都不可能支持Opacity属性。
如果希望其他空间支持半透明的背景颜色,我们除了BackColor的颜色含有alpha信息之外,还需要把ControlStyles.SupportsTransparentBackColor和ControlStyles.UserPaint设为true.例如我们希望得到背景颜色为透明的Label,我们可以自己从Label继承出一个类,并在该类的构造函数里调用Control.SetStyle函数把前面两个Style设为true.此时如果背景颜色的alpha值为0,则该Label的背景变成透明的了。值得一提的是,由于Control.UserPaint为true,我们需要自己负责Paint的全过程,Winforms不会自动把控件画出来。例如在缺省情况下,ListBox中的所有Item就不会画出来,我们需要在它的Paint事件处理器里完成Paint操作。
- 为什么Winforms控件不支持半透明的背景颜色
- 为什么Winforms控件不支持半透明的背景颜色
- HTML 背景颜色半透明
- 关于IE8以下背景颜色的半透明的兼容性问题
- RGBA背景颜色半透明全兼容的做法
- IE8下兼容rgba颜色的半透明背景
- IE8及以下版本,兼容rgba颜色的半透明背景
- 设置控件的背景颜色。
- Winforms:透明的控件
- android设置控件背景透明、半透明的方法
- 控件背景颜色和窗口背景颜色的设置
- 设置static控件背景颜色、控件字体的背景颜色和控件字体的颜色
- C#绘制半透明窗体,只让窗体背景半透明,而窗体里面的控件不透明
- CSS如何定义DIV背景半透明颜色
- 兼容各个浏览器css背景颜色半透明
- 图层背景半透明,字体颜色不半透明
- VC改变控件的背景颜色
- MFC Button控件的背景颜色
- WebService的简介
- 计算机漏洞安全相关的概念POC | EXP | VUL | CVE | 0DAY
- Gan与imitation learning,theano平台搭建(1)
- java 内存分配
- 英语关键词解析
- 为什么Winforms控件不支持半透明的背景颜色
- Python抓取网页图片
- 1008. 数组元素循环右移问题 (20)--PAT乙级
- 验证码点击无法更新处理
- 使用Explorer++批量打开多个目录
- JAVAEE之jQuery
- Leetcode 661
- 快速查找素数-0J
- mtd驱动分析-硬件驱动层