vb能让子窗口透明吗?该怎么处理
vb能让子窗口透明吗?
如题。如果是顶级窗口,可以透明,如果是子窗口则无法透明,是这样的吗?
我的测试代码如下:
------解决方案--------------------

------解决方案--------------------
都可以透明。
------解决方案--------------------
如题。如果是顶级窗口,可以透明,如果是子窗口则无法透明,是这样的吗?
我的测试代码如下:
Option Explicit
'''''模块中.....
'透明窗体
Public Const WS_EX_LAYERED = &H80000
Public Const GWL_EXSTYLE = (-20)
Public Const LWA_ALPHA = &H2
Public Const LWA_COLORKEY = &H1
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 SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd&, ByVal nIndex&, ByVal dwNewLong&) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As Long
'通用透明窗体的过程
Public Sub SetTouMing(ByVal Hwnd As Long, ByVal bAlpha As Integer)
On Error Resume Next
Dim sTy1 As Long
sTy1 = GetWindowLong(Hwnd, GWL_EXSTYLE)
sTy1 = sTy1 Or WS_EX_LAYERED
SetWindowLong Hwnd, GWL_EXSTYLE, sTy1
'透明度bAlpha:0~255, 0表示完全透明
SetLayeredWindowAttributes Hwnd, 0, bAlpha, LWA_ALPHA '192
End Sub
'''''2个form窗体
''''Form1
Option Explicit
Private Sub Form_Load()
Form2.Show
End Sub
'''''Form2
Option Explicit
Private Sub Form_Load()
SetParent Me.Hwnd, Form1.Hwnd'''''如果不加这一句,可以完成透明
SetTouMing Me.Hwnd, 192
End Sub
------解决方案--------------------
------解决方案--------------------
都可以透明。
------解决方案--------------------
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 Declare Function UpdateLayeredWindow Lib "user32" (ByVal hWnd As Long, ByVal hdcDst As Long, pptDst As Any, psize As Any, ByVal hdcSrc As Long, pptSrc As Any, crKey As Long, ByVal pblend As Long, ByVal dwFlags As Long) As Long
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 Const GWL_EXSTYLE = (-20)
Private Const LWA_COLORKEY = &H1
Private Const LWA_ALPHA = &H2
Private Const ULW_COLORKEY = &H1
Private Const ULW_ALPHA = &H2
Private Const ULW_OPAQUE = &H4
Private Const WS_EX_LAYERED = &H80000
'From******************Transparent****************
Public Function isTransparent(ByVal hWnd As Long) As Boolean
On Error Resume Next
Dim Msg As Long
Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
If (Msg And WS_EX_LAYERED) = WS_EX_LAYERED Then
isTransparent = True
Else
isTransparent = False
End If
If Err Then
isTransparent = False
End If
End Function
Public Function MakeTransparent(ByVal hWnd As Long, ByVal Perc As Integer) As Long
Dim Msg As Long
On Error Resume Next
Perc = ((100 - Perc) / 100) * 255
If Perc < 0 Or Perc > 255 Then
MakeTransparent = 1
Else
Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
Msg = Msg Or WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, Msg
SetLayeredWindowAttributes hWnd, 0, Perc, LWA_ALPHA