ReleaseCapture (user32)
Last changed: -


C# Signature:

static extern bool ReleaseCapture();

VB.NET Signature:

<DllImport("user32.dll")> _
Private Shared Function ReleaseCapture() As Boolean
End Function

User-Defined Types:




ReleaseCapture will delegate mousedown events to underlying controls.

Tips & Tricks:

Create a form without a title bar and can be moved by mouse.

   'const and dll functions for moving form
    Public Const WM_NCLBUTTONDOWN As Integer = &HA1
    Public Const HT_CAPTION As Integer = &H2

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function SendMessage(ByVal hWnd As IntPtr,
            ByVal Msg As UInteger,
            ByVal wParam As IntPtr,
            ByVal lParam As IntPtr) As IntPtr
    End Function

    <DllImportAttribute("user32.dll")> _
    Public Shared Function ReleaseCapture() As Boolean
    End Function

    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
    If e.Button = MouseButtons.Left Then
        SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0)
    End If
    End Sub

Sample Code:

You can use the ReleaseCapture() function to provide drag functionality. for example the following code will allow the user to drag a control around a form (you'll have to assign this code to the mousedown event):

private static extern int SendMessage(IntPtr hWnd, int msg , int wParam , ref int lParam);
public static extern int ReleaseCapture(IntPtr hwnd);

private const int WM_SYSCOMMAND = 0x112;
private const int MOUSE_MOVE = 0xF012;

private void control_MouseDown(object sender, MouseEventArgs e)
   Control ctrl = sender as Control;
   int nul =0;
   SendMessage(ctrl.Handle, WM_SYSCOMMAND, MOUSE_MOVE, ref nul);

Alternative Managed API:

Capture property on System.Windows.Forms.Control

Do you know one? Please contribute it!