设置窗体透明

‘如下两个窗体均为透明,即,可以看到其后的屏幕。

Option Explicit

‘Example
‘Call Translucent(Me.hwnd)’设置当前窗体半透明
‘Translucent oAutoCAD.hwnd’设置已绑定的 AutoCAD 半透明

Private Declare Function GetWindowLong Lib “user32.dll” 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 As Long = -20
Private Const LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1

‘hWnd是透明窗体的句柄
‘crKey为掩码的颜色,可以用RGB(r,g,b)来指定
‘bAlpha是不透明度,取值范围是(0,255),其中0代表全透明,255代表不透明
‘dwFlags是透明方式,三种取值方式:
‘LWA_ALPHA时,crKey参数无效,bAlpha参数有效
‘LWA_COLORKEY时,颜色为crKey的地方变为透明,bAlpha参数无效
‘LWA_ALPHA Or LWA_COLORKEY时,crKey的地方将变为全透明,其它地方根据bAlpha参数确定透明度
Public Sub Translucent(ByVal hwnd As Long)
On Error Resume Next
SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED
SetLayeredWindowAttributes hwnd, RGB(255, 255, 255), 128, LWA_ALPHA
On Error GoTo 0
End Sub

Public Sub NoTranslucent(ByVal hwnd As Long)
On Error Resume Next
SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED
SetLayeredWindowAttributes hwnd, RGB(255, 255, 255), 255, LWA_ALPHA
On Error GoTo 0
End Sub

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注