在VB中,怎么样实现Form界面的透明阿,我在网上找了一个代码,但是他连表单上的所有控件全部透明了。
请教各位大虾如何和实现界面的透明!!!!!!

解决方案 »

  1.   

    '下边在标准模块里写代码
    Option ExplicitPublic Const WS_OVERLAPPED = &H0&
    Public Const WS_EX_LAYERED = &H80000
    Public Const GWL_EXSTYLE = (-20)
    Public Const LWA_ALPHA = &H2
    Public Const LWA_COLORKEY = &H1Public 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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long'在窗口的load事件里写下面代码
        Dim rtn As Long    rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE)    
        rtn = rtn Or WS_EX_LAYERED    
        SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn     
        SetLayeredWindowAttributes Me.hwnd, 255, 200, LWA_ALPHA  '第二个参数表示透明程度
      

  2.   

    rainstormmaster(暴风雨) 好的,谢谢你!!! xihongjian(踏上编程路)  同样谢谢你!!!
      

  3.   

    rainstormmaster(暴风雨)  你好,请问有时间了嘛?
      

  4.   

    Private Sub Form_Load()
      Dim rtn As Long
      rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE) '注释:取的窗口原先的样式
      rtn = rtn Or WS_EX_LAYERED '注释:使窗体添加上新的样式WS_EX_LAYERED
      SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn '注释:把新的样式赋给窗体
      SetLayeredWindowAttributes Me.hwnd, 0, 192, LWA_ALPHA
     ' SetLayeredWindowAttributes Me.hwnd, &H0, 0, LWA_COLORKEY
    End SubModule1
    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 Const WS_EX_LAYERED = &H80000
    Public Const GWL_EXSTYLE = (-20)
    Public Const LWA_ALPHA = &H2
    Public Const LWA_COLORKEY = &H1
    Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
      

  5.   

    我寫過的,上次給人做過一個。
    MSN:[email protected]
      

  6.   

    vansoft(Vansoft Workroom)  能否赐教?
      

  7.   

    上次做窗体最前的时候,从zyl910那里批发来的,希望对楼主有用哦.
    窗体最前+透明度不断变化,可以看到窗体后面的内容的改变.代码如下: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 SWP_FRAMECHANGED = &H20
    Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED
    Private Const Flags = SWP_DRAWFRAME Or SWP_NOMOVE Or SWP_NOSIZEConst LWA_COLORKEY = &H1
    Const LWA_ALPHA = &H3
    Const GWL_EXSTYLE = (-20)
    Const WS_EX_LAYERED = &H80000
    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
    Dim I As Long
    Dim L As Long
    Dim Ret As Long
    Dim HWD As Long
    Dim HD As LongPrivate Sub Form_KeyPress(KeyAscii As Integer)
    End
    End SubPrivate Sub Form_Load()
    HWD = Me.HWND
    HD = Me.hDC
    SetWindowPos HWD, HWND_TOPMOST, 0, 0, 0, 0, Flags
    Ret = GetWindowLong(HWD, GWL_EXSTYLE)
    Ret = Ret Or WS_EX_LAYERED
    SetWindowLong HWD, GWL_EXSTYLE, Ret
    Me.Move 0, 0
    L = 1
    Timer1.Interval = 30
    End Sub
    Private Sub Timer1_Timer()
    DoEvents
    I = I + L
    If I = 255 Then L = -1
    If I = 0 Then L = 1
    SetLayeredWindowAttributes HWD, 0, I, LWA_ALPHA
    End Sub在窗体上直接放一张图片,再放一个TIMER控件,F5运行,点中窗体按任意键退出程序
      

  8.   

    51365133(渊海)  我试了一下,它报错“无法找到GetWindowLong DLL 入口”,请问怎么回事?WallesCai(曾经沧海难为水,除却巫山不是云。此情可待成追忆,只是)   谢谢!!我去试一下。
      

  9.   

    后边的 Module1 里边的内容你建了吗?>
      

  10.   

    Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
    Const WS_EX_LAYERED = &H80000
    Const GWL_EXSTYLE = (-20)
    Const LWA_ALPHA = &H2
    Const LWA_COLORKEY = &H1
    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 LongPrivate Sub Form_Load()
      Dim rtn As Long
      rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
      rtn = rtn Or WS_EX_LAYERED
      SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn
      SetLayeredWindowAttributes Me.hwnd, 0, 100, LWA_ALPHA
     ' 可以根据需要调整透明度,我这里用的是100
    End Sub//建立一个工程文件,把上边的代码复制进去,其它的不要,我测试了可以的
      

  11.   

    Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
    Const WS_EX_LAYERED = &H80000
    Const GWL_EXSTYLE = (-20)
    Const LWA_ALPHA = &H2
    Const LWA_COLORKEY = &H1
    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 LongPrivate Sub Form_Load()
      Dim rtn As Long
      rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
      rtn = rtn Or WS_EX_LAYERED
      SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn
      SetLayeredWindowAttributes Me.hwnd, 0, 100, LWA_ALPHA
     ' 可以根据需要调整透明度,我这里用的是100
    End Sub
      

  12.   

    51365133(渊海)  谢谢 你我也 盖了一下,很好的Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
    Const WS_EX_LAYERED = &H80000
    Const GWL_EXSTYLE = (-20)
    Const LWA_ALPHA = &H2
    Const LWA_COLORKEY = &H1
    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 LongPrivate Sub Form_Load()
       SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_LAYERED
      SetLayeredWindowAttributes Me.hwnd, 0, 255, LWA_ALPHA
    End Sub把form的背景设置成 黑色, 你看看,很好的
      

  13.   

    Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
    Const WS_EX_LAYERED = &H80000
    Const GWL_EXSTYLE = (-20)
    Const LWA_ALPHA = &H3
    Const LWA_COLORKEY = &H1
    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 LongPrivate Sub Form_Load()
        SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_LAYERED
      SetLayeredWindowAttributes Me.hwnd, 0, 255, LWA_ALPHA
    End Sub
    把form的背景设置成 黑色, 你看看,很好的是这样
      

  14.   

    Option ExplicitPrivate 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 LongPrivate Const WS_EX_LAYERED = &H80000
    Private Const GWL_EXSTYLE = (-20)
    Private Const LWA_ALPHA = &H2Private Sub Form_Load()
        Dim FormStyle As Long
         
        '  取的窗口原先的样式
        FormStyle = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
        '  使窗体添加上新的样式WS_EX_LAYERED
        FormStyle = FormStyle Or WS_EX_LAYERED
        '  把新的样式赋给窗体
        SetWindowLong Me.hwnd, GWL_EXSTYLE, FormStyle
        '  设置窗体为半透明
        SetLayeredWindowAttributes Me.hwnd, 0, 152, LWA_ALPHA
    End Sub这个也绝对OK
      

  15.   

    可以啊,这样的同样OK
    Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
    Const WS_EX_LAYERED = &H80000
    Const GWL_EXSTYLE = (-20)
    Const LWA_ALPHA = &H3
    Const LWA_COLORKEY = &H1
    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 LongPrivate Sub Form_Load()
        SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_LAYERED
      SetLayeredWindowAttributes Me.hwnd, 0, 255, LWA_ALPHA
    End Sub
    把form的背景设置成 黑色, 你看看,很好的是这样oner007(小海)    你的程序代码是什么?