C# 透明窗體制作實(shí)現(xiàn)方法比較分析
更新時(shí)間:2012年12月20日 14:37:33 作者:
制作透明窗體辦法有好幾種,各有優(yōu)缺點(diǎn).我們先來看看C#本身提供的辦法:通過設(shè)置窗體的 TransparencyKey實(shí)現(xiàn),需要的朋友可以了解下
制作透明窗體辦法有好幾種,各有優(yōu)缺點(diǎn).
我們先來看看C#本身提供的辦法
1:通過設(shè)置窗體的 TransparencyKey實(shí)現(xiàn)
例:窗體中的白色會(huì)變成透明
this.BackColor =Color.White; this.TransparencyKey = Color.White;
2:通過設(shè)置窗體的 Opacity 實(shí)現(xiàn)
例:窗體的透明度為50%
this.Opacity = 0.5;
為了更好說明問題,我們先看一個(gè)實(shí)例。
(1)新建一個(gè)winform應(yīng)用程序
(2)FormLoad中添加以下代碼:
this.BackColor = Color.White;
this.TransparencyKey = Color.White;
(3)加入一個(gè)Label,Text = "TransparencyKey Demo",Backcolor = White(或透明)
(4)按F5運(yùn)行如下圖所示
粗心的朋友對(duì)上圖要看仔細(xì)了,是不是發(fā)現(xiàn)“TransparencyKey Demo”文字帶白邊?如果你把該窗口拖到一個(gè)正在播放的視頻上就會(huì)看得更清楚。
結(jié)論:TransparencyKey只支持透明或不透明,不支持過度色,比如PNG圖片中的從不透明到透明的過渡色會(huì)顯示出討厭的效果。
再來看看Opacity,我們發(fā)現(xiàn)它的顯示效果很好,不存在TransparencyKey的過度色問題,但是Opacity設(shè)置的是窗體的透明度,和普通窗口相比,只是透明度不同而已,其他沒有區(qū)別。如果你把通過Opacity制作的透明窗體蓋在其他程序的窗口上,你看得到后面的窗口,卻沒法直接操作后面的窗體。并且該窗口上所有的控件也會(huì)產(chǎn)生透明效果,無法單獨(dú)控制。
最后,我要說的是,不管TransparencyKey的實(shí)現(xiàn),還是Opacity的實(shí)現(xiàn),其實(shí)都是對(duì)SetLayeredWindowAttributes()函數(shù)的封裝,只是參數(shù)不同而已。
在下一篇文章里,我們將實(shí)現(xiàn)更多的效果,但不再討論SetLayeredWindowAttributes(),因?yàn)樗?種功能已被微軟封裝成TransparencyKey和Opacity,大家只要用就行了。
我們先來看看C#本身提供的辦法
1:通過設(shè)置窗體的 TransparencyKey實(shí)現(xiàn)
例:窗體中的白色會(huì)變成透明
復(fù)制代碼 代碼如下:
this.BackColor =Color.White; this.TransparencyKey = Color.White;
2:通過設(shè)置窗體的 Opacity 實(shí)現(xiàn)
例:窗體的透明度為50%
復(fù)制代碼 代碼如下:
this.Opacity = 0.5;
為了更好說明問題,我們先看一個(gè)實(shí)例。
(1)新建一個(gè)winform應(yīng)用程序
(2)FormLoad中添加以下代碼:
this.BackColor = Color.White;
this.TransparencyKey = Color.White;
(3)加入一個(gè)Label,Text = "TransparencyKey Demo",Backcolor = White(或透明)
(4)按F5運(yùn)行如下圖所示

粗心的朋友對(duì)上圖要看仔細(xì)了,是不是發(fā)現(xiàn)“TransparencyKey Demo”文字帶白邊?如果你把該窗口拖到一個(gè)正在播放的視頻上就會(huì)看得更清楚。
結(jié)論:TransparencyKey只支持透明或不透明,不支持過度色,比如PNG圖片中的從不透明到透明的過渡色會(huì)顯示出討厭的效果。
再來看看Opacity,我們發(fā)現(xiàn)它的顯示效果很好,不存在TransparencyKey的過度色問題,但是Opacity設(shè)置的是窗體的透明度,和普通窗口相比,只是透明度不同而已,其他沒有區(qū)別。如果你把通過Opacity制作的透明窗體蓋在其他程序的窗口上,你看得到后面的窗口,卻沒法直接操作后面的窗體。并且該窗口上所有的控件也會(huì)產(chǎn)生透明效果,無法單獨(dú)控制。
最后,我要說的是,不管TransparencyKey的實(shí)現(xiàn),還是Opacity的實(shí)現(xiàn),其實(shí)都是對(duì)SetLayeredWindowAttributes()函數(shù)的封裝,只是參數(shù)不同而已。
在下一篇文章里,我們將實(shí)現(xiàn)更多的效果,但不再討論SetLayeredWindowAttributes(),因?yàn)樗?種功能已被微軟封裝成TransparencyKey和Opacity,大家只要用就行了。
您可能感興趣的文章:
- C# WinForm實(shí)現(xiàn)Win7 Aero透明效果代碼
- C# 無邊框窗體邊框陰影效果的簡單實(shí)現(xiàn)
- C#實(shí)現(xiàn)窗體淡入淡出效果的方法總結(jié)
- 用 C# Winform做出全透明的磨砂玻璃窗體效果代碼
- C# 開發(fā)圓角控件(窗體)的具體實(shí)現(xiàn)
- C# Winform實(shí)現(xiàn)捕獲窗體最小化、最大化、關(guān)閉按鈕事件的方法
- C# WINFORM 強(qiáng)制讓窗體獲得焦點(diǎn)的方法代碼
- C# SkinEngine控件 給窗體添加皮膚的方法
- C# 動(dòng)畫窗體(AnimateWindow)的小例子
- C#編程實(shí)現(xiàn)帶有Aero效果的窗體示例
相關(guān)文章
C#實(shí)現(xiàn)Excel動(dòng)態(tài)生成PivotTable
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)Excel動(dòng)態(tài)生成PivotTable的相關(guān)方法,感興趣的小伙伴們可以參考一下2016-04-04C#使用linq對(duì)數(shù)組進(jìn)行篩選排序的方法
這篇文章主要介紹了C#使用linq對(duì)數(shù)組進(jìn)行篩選排序的方法,實(shí)例分析了C#實(shí)用linq擴(kuò)展進(jìn)行數(shù)組排序的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04C# 中將數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組的方法
C# 中將數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組的方法,需要的朋友可以參考一下2013-05-05