學(xué)習(xí)制作半透明窗體

字號(hào):

函數(shù)SetLayeredWindowAttributes
    使用這個(gè)函數(shù),可以輕松的實(shí)現(xiàn)半透明窗體。按照微軟的要求,透明窗體窗體在創(chuàng)建時(shí)應(yīng)使用WS_EX_LAYERED參數(shù)(用CreateWindowEx),或者在創(chuàng)建后設(shè)置該參數(shù)(用SetWindowLong),我選用后者。全部函數(shù)、常量聲明如下:
    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
      其中hwnd是透明窗體的句柄,crKey為顏色值,bAlpha是透明度,取值范圍是[0,255],dwFlags是透明方式,可以取兩個(gè)值:當(dāng)取值為L(zhǎng)WA_ALPHA時(shí),crKey參數(shù)無(wú)效,bAlpha參數(shù)有效;當(dāng)取值為L(zhǎng)WA_COLORKEY時(shí),bAlpha參數(shù)有效而窗體中的所有顏色為crKey的地方將變?yōu)橥该鳎@個(gè)功能很有用:我們不必再為建立不規(guī)則形狀的窗體而調(diào)用一大堆區(qū)域分析、創(chuàng)建、合并函數(shù)了,只需指定透明處的顏色值即可,哈哈哈哈!請(qǐng)看具體代碼。
    Private Const WS_EX_LAYERED = &H80000
    Private Const GWL_EXSTYLE = (-20)
    Private Const LWA_ALPHA = &H2
    Private Const LWA_COLORKEY = &H1
    代碼一:一個(gè)半透明窗體
    Private Sub Form_Load()
    Dim rtn As Long
    rtn = GetWindowLong(hwnd, GWL_EXSTYLE)
    rtn = rtn Or WS_EX_LAYERED
    SetWindowLong hwnd, GWL_EXSTYLE, rtn
    SetLayeredWindowAttributes hwnd, 0, 200, LWA_ALPHA
    End Sub
    代碼二:形狀不規(guī)則的窗體
    Private Sub Form_Load()
    Dim rtn As Long
    BorderStyler=0
    rtn = GetWindowLong(hwnd, GWL_EXSTYLE)
    rtn = rtn Or WS_EX_LAYERED
    SetWindowLong hwnd, GWL_EXSTYLE, rtn
    SetLayeredWindowAttributes hwnd, &HFF0000, 0, LWA_COLORKEY ´將扣去窗口中的藍(lán)色
    End Sub