Для этого нужно два метода P / Invoke.
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hwnd, int msg, int wparam, int lparam);
[DllImport("user32.dll")]
static extern bool ReleaseCapture();
Пара констант:
const int WmNcLButtonDown = 0xA1;
const int HtCaption= 2;
Обработайте событие MouseDown
в вашей форме, затем сделайте следующее:
private void Form_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
ReleaseCapture();
SendMessage(this.Handle, WmNcLButtonDown, HtCaption, 0);
}
}
Это отправит вашу форму тому же событию, которое она получает, когда мышь щелкает и удерживает область заголовка. Переместите мышь, и окно переместится. Когда вы отпустите кнопку мыши, движение остановится. Очень просто.