在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
转载:http://www.cnblogs.com/techmango/archive/2012/03/31/2427523.html
第一种,利用windows的消息机制来实现: 首先﹐.定义鼠標左鍵按下時的Message标识﹔其次﹐在Form1_MouseDown方法﹐讓操作系統誤以為是按下标题栏。 1 private const int WM_NCLBUTTONDOWN = 0XA1; //.定义鼠標左鍵按下 2 private const int HTCAPTION = 2; 2.讓操作系統誤以為是按下标题栏 1 private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) 2 { 3 //為當前的應用程序釋放鼠標鋪獲 4 ReleaseCapture(); 5 //發送消息﹐讓系統誤以為在标题栏上按下鼠標 6 SendMessage((int)this.Handle,WM_NCLBUTTONDOWN,HTCAPTION,0); 7 } 3.申明程序中所Windows的API函數 1 [DllImport("user32.dll",EntryPoint="SendMessageA")] 2 private static extern int SendMessage(int hwnd,int wMsg,int wParam,int lParam); 3 4 [DllImport("user32.dll")] 5 private static extern int ReleaseCapture();
第二种,通过自定鼠标左键按下时产生的事件: * 首先将窗体的边框样式修改为None,让窗体没有标题栏 1 private bool isMouseDown = false; 2 private Point FormLocation; //form的location 3 private Point mouseOffset; //鼠标的按下位置
1 private void Form1_MouseDown(object sender, MouseEventArgs e) 2 { 3 if (e.Button == MouseButtons.Left) 4 { 5 isMouseDown = true; 6 FormLocation = this.Location; 7 mouseOffset = Control.MousePosition; 8 } 9 }
1 private void Form1_MouseUp(object sender, MouseEventArgs e) 2 { 3 isMouseDown = false; 4 }
1 private void Form1_MouseMove(object sender, MouseEventArgs e) 2 { 3 int _x = 0; 4 int _y = 0; 5 if (isMouseDown) 6 { 7 Point pt = Control.MousePosition; 8 _x = mouseOffset.X - pt.X; 9 _y = mouseOffset.Y - pt.Y; 10 11 this.Location = new Point(FormLocation.X - _x, FormLocation.Y - _y); 12 } 13 }
|
请发表评论