老鳥分析VB.NET窗體透明度
#t#VB.NET還是比較常用的,于是我研究了一下VB.NET窗體透明度漸變效果:我們還是來看一下在VB6中的實(shí)現(xiàn),在這里拿出來和大家分享一下,希望對大家有用。
使用這個函數(shù),可以輕松控制VB.NET窗體透明度。按照微軟的要求,透明窗體在創(chuàng)建時應(yīng)使用WS_EX_LAYERED參數(shù)(用CreateWindowEx),或者在創(chuàng)建后設(shè)置該參數(shù)(用SetWindowLong),我選用后者。
SetLayeredWindowAttributes函數(shù),其中hwnd是透明窗體的句柄,crKey為顏色值,bAlpha是透明度,取值范圍是[0,255],dwFlags是透明方式,可以取兩個值:當(dāng)取值為 LWA_ALPHA時,crKey參數(shù)無效,bAlpha參數(shù)有效;當(dāng)取值為LWA_COLORKEY時,bAlpha參數(shù)有效而窗體中的所有顏色為 crKey的地方將變?yōu)橥该鳌?/P>
- Const LWA_COLORKEY = &H1
- Const LWA_ALPHA = &H2
- Const GWL_EXSTYLE = (-20)
- Const WS_EX_LAYERED = &H80000
- PrivateDeclareFunction GetWindowLong Lib "user32" Alias "GetWindowLongA"
(ByVal hWnd AsLong, ByVal nIndex AsLong) AsLong- PrivateDeclareFunction SetWindowLong Lib "user32" Alias "SetWindowLongA"
(ByVal hWnd AsLong, ByVal nIndex AsLong, ByVal dwNewLong AsLong) AsLong- PrivateDeclareFunction SetLayeredWindowAttributes Lib "user32"
(ByVal hWnd AsLong, ByVal crKey AsLong, ByVal bAlpha AsByte, ByVal dwFlags AsLong) AsLong- PrivateSub Form_Load()
- Dim Ret AsLong
- 'Set the window style to 'Layered'
- Ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
- RetRet = Ret Or WS_EX_LAYERED
- SetWindowLong Me.hWnd, GWL_EXSTYLE, Ret
- 'Set the opacity of the layered window to 128
- '我們可以設(shè)置這個數(shù)值來控制透明程度
- SetLayeredWindowAttributes Me.hWnd, 0, 128, LWA_ALPHA
- EndSub
在VB.NET中,太簡單了!系統(tǒng)為窗體提供了Opacity屬性,來確定窗體的不透明和透明程度,0%為透明,100%為不透明。以下程序通過循環(huán)顯示VB.NET窗體透明度過程,為了讓大家看清楚其變化,在循環(huán)過程中使用了System.Threading.Thread.Sleep來停頓。
- PrivateSub button1_Click(ByVal sender As System.Object,
_ByVal e As System.EventArgs) Handles button1.Click- '窗體的透明度漸變過程
- button1.Enabled = False
- Dim I AsDouble
- For I = 0.01 To 1 Step 0.01
- Me.Opacity = I
- System.Windows.Forms.Application.DoEvents()
- System.Threading.Thread.Sleep(5)
- Next
- Me.Opacity = 1
- button1.Enabled = True
- EndSub