我可以用轨迹栏控制窗体的不透明度吗?

时间:2009-07-09 12:39:31

标签: vb.net winforms

这行代码使表单透明“User32Wrappers.SetLayeredWindowAttributes(Me.Handle,0,_                            255 * 0.4,User32Wrappers.LWA.Alpha)“

如果我调整0.4到0.6,它将变得不那么透明。

我想知道我是否可以通过轨迹栏控制这个变量以及如何操作!

Public Class Form1

    Private _InitialStyle As Integer


    Private Sub Form_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles MyBase.Load

        Form2.Show()



        ' Grab the Extended Style information

        ' for this window and store it.

        _InitialStyle = User32Wrappers.GetWindowLong(Me.Handle, User32Wrappers.GWL.ExStyle)

        ' Set this window to Transparent

        ' (to the mouse that is!)

        SetFormToTransparent()

        ' Just for giggles, set this window

        ' to stay on top of all others so we

        ' can see what's happening.

        Me.TopMost = True
    End Sub

    Private Sub SetFormToTransparent()
        ' This creates a new Extended Style

        ' for our window, which takes effect

        ' immediately upon being set, that

        ' combines the initial style of our window

        ' (saved in Form.Load) and adds the ability

        ' to be Transparent to the mouse.

        ' Both Layered and Transparent must be

        ' turned on for this to work AND have

        '  the window render properly!

        User32Wrappers.SetWindowLong(Me.Handle, User32Wrappers.GWL.ExStyle, _
            _InitialStyle Or User32Wrappers.WS_EX.Layered Or User32Wrappers.WS_EX.Transparent)

        ' Don't forget to set the Alpha

        ' for the window or else you won't be able

        ' to see the window! Possible values

        ' are 0 (visibly transparent)

        ' to 255 (visibly opaque). I'll set

        ' it to 20% visible here for show.

        ' The second parameter is 0, because

        ' we're not using a ColorKey!

        User32Wrappers.SetLayeredWindowAttributes(Me.Handle, 0, _
                           255 * 0.4, User32Wrappers.LWA.Alpha)
    End Sub

    Private Sub SetFormToOpaque()
        ' Turn off the Transparent Extended Style.

        User32Wrappers.SetWindowLong(Me.Handle, User32Wrappers.GWL.ExStyle, _
                _InitialStyle Or User32Wrappers.WS_EX.Layered)

        ' Set the Alpha back to 100% opaque.

        User32Wrappers.SetLayeredWindowAttributes(Me.Handle, _
                           0, 255, User32Wrappers.LWA.Alpha)
    End Sub

    Public Class User32Wrappers

        Public Enum GWL As Integer
            ExStyle = -20
        End Enum

        Public Enum WS_EX As Integer
            Transparent = &H20
            Layered = &H80000
        End Enum

        Public Enum LWA As Integer
            ColorKey = &H1
            Alpha = &H2
        End Enum

        <DllImport("user32.dll", EntryPoint:="GetWindowLong")> _
        Public Shared Function GetWindowLong( _
            ByVal hWnd As IntPtr, _
            ByVal nIndex As GWL _
                ) As Integer
        End Function

        <DllImport("user32.dll", EntryPoint:="SetWindowLong")> _
        Public Shared Function SetWindowLong( _
            ByVal hWnd As IntPtr, _
            ByVal nIndex As GWL, _
            ByVal dwNewLong As WS_EX _
                ) As Integer
        End Function

        <DllImport("user32.dll", _
          EntryPoint:="SetLayeredWindowAttributes")> _
        Public Shared Function SetLayeredWindowAttributes( _
            ByVal hWnd As IntPtr, _
            ByVal crKey As Integer, _
            ByVal alpha As Byte, _
            ByVal dwFlags As LWA _
                ) As Boolean
        End Function
    End Class

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        End
    End Sub
End Class

1 个答案:

答案 0 :(得分:1)

你完成了大部分工作!只需在表单中添加TrackBar,将Minimum设置为1,Maximum设置为100,并将以下代码添加到表单中:

Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
    SetOpacity(TrackBar1.Value / 100)
End Sub

Private Sub SetOpacity(ByVal value As Single)

    ' Turn off the Transparent Extended Style.
    User32Wrappers.SetWindowLong(Me.Handle, User32Wrappers.GWL.ExStyle, _
            _InitialStyle Or User32Wrappers.WS_EX.Layered)

    ' Set the Alpha.
    User32Wrappers.SetLayeredWindowAttributes(Me.Handle, _
                       0, 255 * value, User32Wrappers.LWA.Alpha)
End Sub