在應用程式表單內點選設定區塊拖曳Form
應用程式在拖曳時只能點選視窗狀態列的地方才可以拖曳,表單內部特定區塊要可以拖曳必須透過OnMouseClick 事件,但是卻有一個特別的情況會發生,就是快速拖曳時會跟不上滑鼠的速度,不知道是不是因為使用NET的事件的關係,改成WIN32 API此現象就可以改善
使用滑鼠事件
使用API達成
使用滑鼠事件
protected Point MousePt; // 紀錄移動前和移動後的滑鼠座標 protected bool canMove = false; // 紀錄表單可否被拖曳 protected int LeftVar = 0, TopVar = 0; // 紀錄form的移動量 private void toolStrip1_MouseDown(object sender, MouseEventArgs e) { // 設定滑鼠移動前的座標 MousePt = new Point(e.X, e.Y); canMove = true; // 如果按下滑鼠左鍵時 可以移動表單 } private void toolStrip1_MouseMove(object sender, MouseEventArgs e) { // 拖曳form if (canMove) { this.Left += e.X - MousePt.X; this.Top += e.Y - MousePt.Y; } } private void toolStrip1_MouseUp(object sender, MouseEventArgs e) { canMove = false; // 如果放開滑鼠左鍵時 暫停移動表單 }
使用API達成
using System.Runtime.InteropServices;//滑鼠API const int WM_SYSCOMMAND = 0x112; const int SC_MOVE = 0xF012; [DllImport("user32", EntryPoint = "ReleaseCapture", CharSet = CharSet.Ansi)] private extern static int ReleaseCapture(); [DllImport("user32", EntryPoint = "SendMessageA", CharSet = CharSet.Ansi)] private extern static int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); private void toolStrip1_MouseDown(object sender, MouseEventArgs e) { int i; i = ReleaseCapture(); i = SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE, 0); }
留言
張貼留言
您好,我是 Lawrence,這裡是我的開發筆記的網誌,如果你對我的文章有任何疑問或者有錯誤的話,歡迎留言讓我知道。