1. 程式人生 > 程式設計 >WindowsForm移動一個沒有標題欄的視窗的方法

WindowsForm移動一個沒有標題欄的視窗的方法

在WinForm程式中,要移動沒有標題欄的視窗,基本的實現思路是監聽需要拖動視窗內的控制元件的滑鼠事件,然後將滑鼠位置傳送給視窗進行相應的位移就可以了。通過借用Windows API也可以很容易實現這一點,比如像下面這樣。

public class Win32Api
{
  public const int WM_SYSCOMMAND = 0x112;
  public const int SC_DRAGMOVE = 0xF012;

  [DllImport("user32.Dll",EntryPoint = "ReleaseCapture")]
  public extern static void ReleaseCapture(); // 滑鼠捕獲
  [DllImport("user32.Dll",EntryPoint = "SendMessage")]
  public extern static void SendMessage(IntPtr hWnd,int wMsg,int wParam,int lParam); // 將訊息傳送給指定的視窗
}

private void pnlHeader_MouseDown(object sender,MouseEventArgs e)
{
  Win32Api.ReleaseCapture();
  Win32Api.SendMessage(this.Handle,Win32Api.WM_SYSCOMMAND,Win32Api.SC_DRAGMOVE,0);
}

WindowsForm移動一個沒有標題欄的視窗的方法

當然,你還可以向這樣向視窗傳送訊息,來實現拖動自定義標題欄移動視窗

public const int WM_NCLBUTTONDOWN = 0x00A1;
public const int HTCAPTION = 2;

private void pnlHeader_MouseDown(object sender,MouseEventArgs e)
{
  if (e.Button == MouseButtons.Left)
  {
    // 釋放控制元件已捕獲的滑鼠
    pnlHeader.Capture = false;

    // 建立併發送WM_NCLBUTTONDOWN訊息
    Message msg =
      Message.Create(this.Handle,Win32Api.WM_NCLBUTTONDOWN,new IntPtr(Win32Api.HTCAPTION),IntPtr.Zero);
    this.DefWndProc(ref msg);
  }
}

以上就是WindowsForm移動一個沒有標題欄的視窗的方法的詳細內容,更多關於WindowsForm 移動視窗的資料請關注我們其它相關文章!