Как перетащить форму мышью не за заголовок на C#?

Как передвинуть форму с помощью мыши, если необходимо установить свойство FormBorderStyle в System.Windows.Forms.FormBorderStyle.None ?

Способ “В лоб”

private Int32 tmpX;
private Int32 tmpY;
private bool flMove = false;

private void frmMain_MouseDown(object sender, MouseEventArgs e)
{
      tmpX = Cursor.Position.X;
      tmpY = Cursor.Position.Y;
      flMove = true;
}

private void frmMain_MouseMove(object sender, MouseEventArgs e)
{
if (flMove)
{
      this.Left = this.Left + (Cursor.Position.X - tmpX);
      this.Top = this.Top + (Cursor.Position.Y - tmpY);

      tmpX = Cursor.Position.X;
      tmpY = Cursor.Position.Y;
}
}

private void frmMain_MouseUp(object sender, MouseEventArgs e)
{
      flMove = false;
}
 

Способ “Хакерский” 

const int WM_NCHITTEST = 0x84;
const int HTCAPTION = 2;
const int HTCLIENT = 1;

protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_NCHITTEST && (int) m.Result == HTCLIENT)
      m.Result = (IntPtr) HTCAPTION;
}
 

И еще один способ “Изящный хакерский”

[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool PostMessage(IntPtr hWnd, uint Msg, uint WParam, uint LParam);

[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool ReleaseCapture();

const uint WM_SYSCOMMAND = 0x0112;
const uint DOMOVE = 0xF012;
const uint DOSIZE = 0xF008;

private void frmMain_MouseDown(object sender, MouseEventArgs e)
{
      ReleaseCapture();
      PostMessage(this.Handle, WM_SYSCOMMAND, DOMOVE, 0);
}
 

P.S.
Список констант:
0xF001 .. 0xF008 = резайз
0xF020 = сворачивает окно или контрол (!!!)
0xF030 = максимизирует окно или контрол
0xF040 = z order — окно на задний план без потери фокуса ввода
0xF060 = закрыть окно
0xF00A = телепортирует мышку на заголовок окна или контрола
0xF00С .. 0xF00F = смешной резайс, ось X мышки перевернута

Советуем портал Softout.Ru как каталог с возможностью бесплатно скачать программы для любых целей.



Опубликовал admin
14 Дек, Вторник 2010г.

Комментарии

Спасибо за Ваш труд!




Программирование для чайников.