VB.NET: Make a Form semi-transparent when moving and resizing it

Feb 17, 2005  • Visual Basic  • .NET

Here’s a little VB.NET code snippet that I wrote to make a Form semi-transparent when moving and resizing it. I think this is a neat little effect to add to an application.

Public Class frmTransparentMoveResize
Inherits System.Windows.Forms.Form

Private _OpacityResize As Double = 0.5 Private _OpacityMove As Double = 0.5
Private _OpacityOriginal As Double

Private Const WM_NCLBUTTONDOWN As Long = &HA1
Private Const WM_NCLBUTTONUP As Long = &HA0

Private Const WM_MOVING As Long = &H216
Private Const WM_SIZE As Long = &H5

Protected Overrides Sub DefWndProc(ByRef m As System.Windows.Forms.Message)
Static LButtonDown As Boolean

'Check the state of the Left Mouse Button

If CLng(m.Msg) = WM_NCLBUTTONDOWN Then

'set LButtonDown to True is Left Mouse Button is down

LButtonDown = True

ElseIf CLng(m.Msg) = WM_NCLBUTTONUP Then

'set LButtonDown to False is Left Mouse Button is not down

LButtonDown = False

End If

If LButtonDown Then

If CLng(m.Msg) = WM_MOVING Then

'Set the forms opacity to 50% if user is draging the window

If Me.Opacity <> _OpacityMove Then

_OpacityOriginal = Me.Opacity Me.Opacity = _OpacityMove
End If

ElseIf CLng(m.Msg) = WM_SIZE Then

'Set the forms opacity to 50% if user is resizing the window

If Me.Opacity <> _OpacityResize Then

_OpacityOriginal = Me.Opacity Me.Opacity = _OpacityResize
End If

End If

ElseIf Not LButtonDown Then

If Me.Opacity <> _OpacityOriginal Then Me.Opacity = _OpacityOriginal
End If

MyBase.DefWndProc(m)
End Sub

Public Property OpacityMove() As Double

Get

Return _OpacityMove
End Get

Set(ByVal Value As Double)
_OpacityMove = Value

End Set

End Property

Public Property OpacityResize() As Double

Get

Return _OpacityResize
End Get

Set(ByVal Value As Double)
_OpacityResize = Value

End Set

End Property
End Class