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 Sub Form_Load()
'背景透明
Dim crKey As Long, bAlpha As Byte, dwFlags As Long
Call SetWindLong
dwFlags = 1 '1 只有 crKey 指定的颜色才透明,忽略 bAlpha 参数
crKey = Me.BackColor '窗体中设为透明的颜色
SetLayeredWindowAttributes Me.hWnd, crKey, bAlpha, dwFlags
End Sub
Private Sub SetWindLong()
Dim ExsTyle As Long
Const WS_EX_Layered = &H80000, GWL_ExsTyle = -20
ExsTyle = GetWindowLong(Me.hWnd, GWL_ExsTyle)
ExsTyle = ExsTyle Or WS_EX_Layered
SetWindowLong Me.hWnd, GWL_ExsTyle, ExsTyle
End Sub
在窗口上加一个Shape控件,把风格设置为圆角矩形,设置背景为不透明,可以把背景色设置为窗口一样的颜色。窗口在调色板页卡选择一个颜色,这个颜色将被处理为透明,不要在系统页卡上选色。把shape扩大到与窗口贴边,这样运行后会裁掉窗口角上部分,保留矩形框部分。