2010-09-01 78 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