在98和xp下,如何使窗体透明呢,SetLayeredWindowAttributes是win2000的api

解决方案 »

  1.   

    http://www.zdnet.com.cn/developer/code/story/0%2C2000081534%2C39103288%2C00.htm
    VB技巧:在2000和XP中透明化窗口 作者: BUILDER.COM
    Monday, January 6 2003 11:16 AM  伴随着Windows 2000的正式发行,开发者现在可以把窗口进行透明化处理了——这个技巧对于节省应用程序的屏幕空间很有帮助。你可以通过调整窗口的opacity属性来控制窗口的透明程度。  在使用Visual Basic 6透明化窗口之前,你需要设置窗口的WS_EX_LAYERED属性。你可以通过SetWindowLong这个API函数做到这一点。然后,你可以用API函数SetLayeredWindowAttributes来调整透明程度,如:Option Explicit
    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 Sub
    Private Sub Command2_Click()
        Call SetWindowLong(Me.hwnd, GWL_EXSTYLE, GetWindowLong(Me.hwnd, GWL_EXSTYLE) And (Not WS_EX_LAYERED))
    End Sub
    Command1_Click事件的代码透明化处理窗口。Command2_Click事件演示了如何把透明化的窗口恢复成原来的状态,如:在.NET中透明化窗口比VB 6.0更容易实现。为此,你只需要设置Opacity属性为0到1之间的一个数值:1代表不透明,0代表完全透明。使用透明的窗口向用户提供信息可以节省宝贵的屏幕空间。这对灵活显示被你的应用程序窗口覆盖的其它窗口的信息是很有用的。在Windows 2000和XP中通过窗口传递更多的鼠标消息
    VB和VB.NET下的透明属性允许窗口传递发生在该窗口下的鼠标消息,这个机制对使用透明窗口来说尤为有用。通过传递鼠标消息,透明化窗口就不会妨碍用户与透明化窗口下面的窗口进行交互。在Visual Basic 6中,设置窗口的WS_EX_TRANSPARENT属性可以控制窗口的类型。这是通过调用SetWindowLong API函数来实现的,如程序清单D程序清单E中Command1_Click事件的代码演示了如何使窗口传递鼠标消息。为了反转透明性,你可以像程序清单F那样重新设置WS_EX_TRANSPARENT属性,它将移动窗口。注意,设置WS_EX_TRANSPARENT属性会影响到整个窗口,用户不能关闭窗口、用鼠标选择该窗口、或者选择窗体(form)上的任何控件。应用程序仍可以通过代码设置来关闭窗口。你可以通过透明化窗口来实现对重要数据的灵活显示。在.NET中,视图的TransparencyKey属性与VB 6.0中的WS_EX_TRANSPARENT属性略微有些区别。通过设置.NET的TransparencyKey,不仅可以使得窗口的用户区在视觉上透明,而且鼠标事件也是“透明的”。不过这样你就不能选择控件和窗口标题栏了。很显然,这种程度的控制比完全禁止窗口要好的多。当应用程序的用户在你的透明化窗口下选择窗体时,通过设置窗口传递鼠标消息属性,应用程序就可以显示用户操作对应的信息了。