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