創建透明窗體

Option Explicit
'從指定窗口的結構中取得信息
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long) As Long

'在窗口結構中爲指定的窗口設置信息
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

'設置窗口透明度
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal HWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Const WS_EX_LAYERED = &H80000
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1

Private Sub Form_Load()
Dim rtn As Long
    rtn = GetWindowLong(HWnd, GWL_EXSTYLE)  '返回擴展窗口樣式
    rtn = rtn Or WS_EX_LAYERED '&H80000
    SetWindowLong HWnd, GWL_EXSTYLE, rtn
    SetLayeredWindowAttributes HWnd, 150, 200, LWA_ALPHA
  
End Sub

'SetLayeredWindowAttributes
'hwnd是透明窗體的句柄,
'crKey爲顏色值,
'bAlpha是透明度,取值範圍是[0,255],
'dwFlags是透明方式,可以取兩個值:
'???????? 當取值爲LWA_ALPHA時,crKey參數無效,bAlpha參數有效;
'???????? 當取值爲LWA_COLORKEY時,bAlpha參數有效而窗體中的所有顏色爲crKey的地方將變爲透明。
'??????? LWA_ALPHA = 0x2???????
'LWA_COLORKEY=0x1 要使使窗體擁有透明效果,
'首先要有WS_EX_LAYERED擴展屬性 (舊的sdk沒有定義這個屬性,所以可以直接指定爲0x80000).
'WS_EX_LAYERED = 0x80000

 
  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章