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
당신은 당신은 아마도을 설정하지 않으 –
너무 많은 사람 덕분에 최소값 0 - 마우스 이벤트는 알파가 0 인 픽셀로 전송되지 않으므로 사용자가 끝까지 드래그하면 해당 이벤트가 멈 춥니 다. –
예 위대한 포인트 감사합니다 –