Using ToolStrip to Create a Custom Title Bar

Our current documentation on creating nonrectangular forms could stand some enhancement. The most glaring piece of missing info is how to add a custom title bar. The document we do have gives code for how to move the form if the user clicks anywhere in the form area - but how often do you need this? In most cases, you want to slap your own custom title bar on the app, and move the app around when the user clicks on this title bar and drags it about.

Picture 1: Meditate Awake! application

For the sample app I've been developing, I decided to replace the standard title bar with a ToolStrip that acts like a title bar. (Can't you tell I'm no graphic designer?) It was surprisingly easy to enable the ToolStrip to act like a title bar. The secret ingredient was setting ToolStrip.Capture to True when the mouse button is clicked; this is necessary to prevent the cursor from moving faster than the form, which results in the cursor flying away from the ToolStrip before you've released the left mouse button.

    Private _MouseOffset As Point
Private isMouseDown As Boolean = False

    Private Sub TitleStrip_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TitleStrip.MouseDown
If e.Button = System.Windows.Forms.MouseButtons.Left Then
_MouseOffset = New Point(e.X, e.Y)
_IsMouseDown = True
TitleStrip.Capture = True
End If
End Sub

Private Sub TitleStrip_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TitleStrip.MouseMove
If _IsMouseDown Then
Dim _CurrentPos As Point = Control.MousePosition
_CurrentPos.X = _CurrentPos.X - _MouseOffset.X
_CurrentPos.Y = _CurrentPos.Y - _MouseOffset.Y
Me.Location = _CurrentPos
End If
End Sub

    Private Sub TitleStrip_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TitleStrip.MouseUp
If e.Button = System.Windows.Forms.MouseButtons.Left Then
_IsMouseDown = False
TitleStrip.Capture = False
End If
End Sub