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