2010-09-01 76 views
2

是否可以創建一個半透明的窗體,它應該在任何打開的窗口中可見,而不是隱藏在後面?請指導!使用VB6的半透明窗體

+0

@GSerg第一款谷歌命中很可能是不可靠的代碼,特別是因爲它有必要調用Windows API。以下接受的答案引用了優秀網站的高質量代碼。 – MarkJ 2010-09-02 08:55:24

回答

3

當然,看到卡爾·彼得森的「半透明」的例子:http://vb.mvps.org/samples/Translucent/

爲了保持在其他窗口可見的形式,你想使用SetWindowPos API函數。

Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long 

Private Const HWND_TOPMOST = -1 
Private Const SWP_NOMOVE = &H2 
Private Const SWP_NOSIZE = &H1 
Private Const OnTopFlags = SWP_NOMOVE Or SWP_NOSIZE 

Public Sub FormOnTop(frm As Form) 
    Call SetWindowPos(frm.hWnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, OnTopFlags) 
End Sub 
+0

對不起,但沒有幫助。我從提供的鏈接下載了代碼並粘貼了Joe提供的代碼。但是如果有新窗口,說任何瀏覽器打開,它都隱藏在瀏覽器窗口後面。 – 2010-09-01 20:02:16

+0

GSerg - 我搜索谷歌的代碼,但只發現代碼,使窗體半透明不是我想要的。透明的所有窗口不隱藏類似於帶寬儀表,其中圖形顯示在瀏覽器窗口。 – 2010-09-01 20:05:48

+1

我會看看我再次發佈的示例和代碼;你可以在你的項目中使用CTranslucent類,並且只需要在你想要的任何form_load上調用透明度。同樣在form_load上,使用Me對象調用FormOnTop函數,即「Call FormOnTop(Me)」 – 2010-09-01 20:34:55

2
'function to make transparent' 

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 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 G = (-20) 
Private Const LWA_COLORKEY = &H1  'to trans' 
Private Const LWA_ALPHA = &H2   'to semi trans' 
Private Const WS_EX_LAYERED = &H80000 

Private Sub Form_Activate() 
    Me.BackColor = vbBlue 
    Trans 1 
End Sub 

Private Sub Trans(Level As Integer) 
    Dim Msg As Long 
    Msg = GetWindowLong(Me.hwnd, G) 
    Msg = Msg Or WS_EX_LAYERED 
    SetWindowLong Me.hwnd, G, Msg 
    SetLayeredWindowAttributes Me.hwnd, vbBlue, Level, LWA_COLORKEY 
End Sub