2009-07-09 7 views
2

코드 라인이 난 것이 될 것이다 0.4 0.6 조정할 경우 형태 투시 "User32Wrappers.SetLayeredWindowAttributes (Me.Handle 0, _ 255 * 0.4 User32Wrappers.LWA.Alpha)"트랙바에서 양식의 불투명도를 제어 할 수 있습니까?

하게 숨어있다.

트랙바를 통해이 변수를 제어 할 수 있는지 알고 싶습니다.

공공 클래스 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

현재 대부분의 작업을 완료했습니다! 그냥 폼에 트랙 바 추가 (100)에 1로 최대 최소를 설정하고 양식에 다음 코드를 추가합니다 :

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 
+0

당신은 당신은 아마도을 설정하지 않으 –

+1

너무 많은 사람 덕분에 최소값 0 - 마우스 이벤트는 알파가 0 인 픽셀로 전송되지 않으므로 사용자가 끝까지 드래그하면 해당 이벤트가 멈 춥니 다. –

+0

예 위대한 포인트 감사합니다 –

관련 문제