按透明度显示窗体


【实例说明】
    选择窗体的透明度,窗体按其相应的透明度显示。

【编程思路】
    调用API函数。

【设计步骤】
    1.新建一个标准工程,创建一个新窗体和一个标准模块,默认名分别为Form1和Module1。
    2.在窗体上放置一个Label控件和ComboBox控件。

    3.源程序  [素材源程序下载]

①在模块中添加以下程序:

Option Explicit

'常量声明
Public Const WS_EX_LAYERED = &H80000
Public Const GWL_EXSTYLE = (-20)
Public Const LWA_ALPHA = &H2
Public Const LWA_COLORKEY = &H1

'API函数声明
Public Declare Function SetLayeredWindowAttributes Lib "user32" _
        (ByVal hwnd As Long, _
        ByVal crKey As Long, _
        ByVal bAlpha As Byte, _
        ByVal dwFlags As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
        (ByVal hwnd As Long, _
        ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
        (ByVal hwnd As Long, _
        ByVal nIndex As Long, _
        ByVal dwNewLong As Long) As Long

②在窗体中添加以下程序:

Option Explicit

Private r As Long
Private s As Long

'自定义函数funFormTrans
Private Function funFormTrans(ByVal s As Long) As Long
        '获取窗体大小
        r = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
        r = r Or WS_EX_LAYERED
        '将半透明值赋予给窗体
        SetWindowLong Me.hwnd, GWL_EXSTYLE, r
        '赋予窗体半透明
        SetLayeredWindowAttributes Me.hwnd, 0, s, LWA_ALPHA
End Function

Private Sub Combo1_Click()
        If Combo1.Text = "0%" Then
                s = 255
        ElseIf Combo1.Text = "20%" Then
                s = 200
        ElseIf Combo1.Text = "50%" Then
                s = 128
        ElseIf Combo1.Text = "100%" Then
                s = 50
        End If

        Call funFormTrans(s)
End Sub

Private Sub Form_Load()
        Combo1.AddItem "0%"
        Combo1.AddItem "20%"
        Combo1.AddItem "50%"
        Combo1.AddItem "100%"
End Sub