请大家指点:怎样使form窗体变为透明?

解决方案 »

  1.   

    背景透明:
    http://vbaccelerator.com/home/VB/Code/Libraries/Graphics_and_GDI/Selection_Fade/article.asp
    操作透明:
    利用SetWindowRgn把窗口中需要透明的部分剪裁掉
      

  2.   

    窗体透明度渐变效果我们还是来看一下在VB6中的实现,VB6中实现(借助API函数SetLayeredWindowAttributes)  使用这个函数,可以轻松的控制窗体的透明度。按照微软的要求,透明窗体在创建时应使用WS_EX_LAYERED参数(用CreateWindowEx),或者在创建后设置该参数(用SetWindowLong),我选用后者。SetLayeredWindowAttributes函数,其中hwnd是透明窗体的句柄,crKey为颜色值,bAlpha是透明度,取值范围是[0,255],dwFlags是透明方式,可以取两个值:当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;当取值为LWA_COLORKEY时,bAlpha参数有效而窗体中的所有颜色为crKey的地方将变为透明。    Const LWA_COLORKEY = &H1    Const LWA_ALPHA = &H2    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    Private Sub Form_Load()        Dim Ret As Long        'Set the window style to 'Layered'        Ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE)        Ret = Ret Or WS_EX_LAYEREDSetWindowLong Me.hWnd, GWL_EXSTYLE, Ret        'Set the opacity of the layered window to 128        '我们可以设置这个数值来控制透明程度        SetLayeredWindowAttributes Me.hWnd, 0, 128, LWA_ALPHA    End Sub
      

  3.   

    SetWindowRgn
    具体怎么做
    我是一 个处学者
    所以有一 苯
      

  4.   

    SetWindowRgn VB声明 
    Declare Function SetWindowRgn Lib "user32" Alias "SetWindowRgn" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long 
    说明 
    这是那些很难有人注意到的对编程者来说是个巨大的宝藏的隐含的API函数中的一个。本函数允许您改变窗口的区域。
    通常所有窗口都是矩形的——窗口一旦存在就含有一个矩形区域。本函数允许您放弃该区域。这意味着您可以创建圆的、星形的窗口,也可以将它分为两个或许多部分——实际上可以是任何形状 
    返回值 
    Long,执行成功为非零值,失败为0 
    参数表 
    参数 类型及说明 
    hWnd Long,将设置其区域的窗口 
    hRgn Long,将设置的区域的句柄,一旦设置了该区域,就不能使用或修改该区域句柄,也不要删除它 
    bRedraw Boolean,若为TRUE,则立即重画窗口 
    注解 
    为区域指定的所有坐标都以窗口坐标(不是客户坐标)表示,它们以整个窗口(包括标题栏和边框)的左上角为起点
     
      

  5.   

    Option Explicit
     Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As LongPrivate Sub Form_Load()
     SetWindowRgn hWnd, Form1.hWnd, True
    End Sub
    我这样写的对吗
      

  6.   


    试一试嘛。不行,少了SetWindowLong。