请问各位大虾:
    如何使窗体透明,而窗体上的部件不透明?(要求Win9X,winNT(2000 xp)都有效)。

解决方案 »

  1.   

    Option Explicit
    Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
    Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As LongPrivate Sub Form_Load()
        Dim hBitmap As Long
        Me.AutoRedraw = True
        hBitmap = CreateCompatibleBitmap(Me.hdc, 0, 0)
        SelectObject Me.hdc, hBitmap
        Me.Refresh
    End Sub
      

  2.   

    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 crey As Byte, _
        ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
    Private Const GWL_EXSTYLE = (-20)
    Private Const WS_EX_LAYERED = &H80000
    Private Const LWA_ALPHA = &H2&Private Sub Command1_Click()
        Dim bytOpacity As Byte
        'Set the transparency level
        bytOpacity = 128
        Call SetWindowLong(Me.hwnd, GWL_EXSTYLE, _
                GetWindowLong(Me.hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED)
        Call SetLayeredWindowAttributes(Me.hwnd, 0, bytOpacity, _
                LWA_ALPHA)
    End SubPrivate Sub Command2_Click()
        Call SetWindowLong(Me.hwnd, GWL_EXSTYLE, _
                GetWindowLong(Me.hwnd, GWL_EXSTYLE) _
                And (Not WS_EX_LAYERED))
     End Sub这是Win32 Api的代码,不过98不支持.............
    你要想在98里达到此效果
    客户端必须装.net framework
    用.net程序实现
    或directx9 api
      

  3.   

    如何使窗体透明,而窗体上的部件不透明
    -------------------------
    TO:楼上,你的连控件也是透明的了,有FAQ的:
    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=195426
      

  4.   

    对于这个问题,最好是自己用代码画,次就是那个FAQ了。我上面贴的代码只能是窗体生成时做,后期不行。
      

  5.   

    9x下只有用directx9 sdk  而2000以上的系统有个API可以直接整
      

  6.   

    不过意思,我看漏了......你试试运行时动态加载不透明控件,用eventinfo捕捉控件事件,进行操作
    try一下 ^_^
      

  7.   

    你只能在做控件的时候设置一下了以下摘自microsoft官方文档"设置 VIEWSTATUS 枚举中的 VIEWSTATUS_OPAQUE 位并绘制传递到 OnDraw 方法的整个控件矩形。控件以完全不透明的形式显示,控件边界的背后不显示容器的任何部分。 
    该设置有助于容器更快地绘制控件。如果没有选定此选项,则控件可以包含透明部分。
    只有不透明的控件可以有纯色背景。"
      

  8.   

    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Const WS_EX_TRANSPARENT = &H20&
    Const GWL_EXSTYLE = (-20)
    Private Sub Form_Load()
    retval = SetWindowLong(Form1.hwnd, GWL_EXSTYLE, WS_EX_TRANSPARENT)
    End Sub
      

  9.   

    laviewpbt(人一定要靠自己)和  dongge2000(※秋日私语※:非[版务].灌!) 2位的的确透明了,,可是,,窗体后面的内容却被固定到了透明的窗体上面了我是2k+vb6的环境
      

  10.   

    我最后说一句:根据好多年前泰山兄的一席话在Win98下实现窗口的完全透明是不可能的
    不信? 你可以按上面的诸位做出的透明窗体,打开, 然后你把壁纸修改了,  你会发现窗体后面的背景还是原来那样的?!  也就是说背景不会改变。
    这是因为WIN9X的所有界面的实现效果其实就是一个BMP图形而已,你见过98下有透明的BMP图形吗?