首先C#无标题栏窗体的实现代码
在load时实现
无工具栏+无窗口标题
1 private void Form1_Load(object sender, EventArgs e) 2 { 3 this.ControlBox = false; 4 this.Text = ""; 5 }
这样就可以实现无标题栏窗体了,示例效果
第一种实现点击窗口内区域移动窗体的方法
重写wndproc,截取在窗体区域内移动的消息,
1 protected override void WndProc(ref Message m) 2 { 3 base.WndProc(ref m); 4 if (m.Msg == 0x84&&m.Result.ToInt32()==1) 5 { 6 m.Result = new IntPtr(2); 7 8 } 9 10 }
第二种实现方法
private void Form1_Load(object sender, EventArgs e) { this.MouseMove+=Form1_MouseMove; } [DllImport("user32.dll", EntryPoint = "SendMessage")] public static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam); [DllImport("user32.dll", EntryPoint = "ReleaseCapture")] public static extern int ReleaseCapture(); private void Form1_MouseMove(object sender, MouseEventArgs e) { ReleaseCapture();//使鼠标事件对当前窗体持续有效 SendMessage(this.Handle, 0x0112, 0xF012, 0); }
第三种
截取鼠标在窗体内按下左键时的消息,改为鼠标在标题栏下按下左击的事件实现移动
1 protected override void WndProc(ref Message m) 2 { 3 if(m.Msg==0x201) 4 { 5 m.Msg = 0xA1; 6 m.WParam = new IntPtr(2); 7 } 8 base.WndProc(ref m); 9 }
第四种最原始的方法
mousedown事件是改变一个bool变量
mousemove时先判断bool变量,移动时设置窗体的location
mouseup时改变bool变量
1 bool mouse_down = false;//鼠标左键是否被按下 2 Point mouse_start_point;//记录按下左键时的鼠标位置 3 Point form_start_point;//记录按下左键时窗口位置 4 5 6 private void Form1_Load(object sender, EventArgs e) 7 { 8 this.ControlBox = false; 9 this.Text = ""; 10 11 this.MouseMove+=Form1_MouseMove; 12 this.MouseUp+=Form1_MouseUp; 13 this.MouseDown+=Form1_MouseDown; 14 } 15 16 private void Form1_MouseDown(object sender, MouseEventArgs e) 17 { 18 if (e.Button == MouseButtons.Left) 19 { 20 this.mouse_down = true; 21 this.mouse_start_point = Control.MousePosition; 22 this.form_start_point = this.Location; 23 } 24 } 25 26 private void Form1_MouseUp(object sender, MouseEventArgs e) 27 { 28 this.mouse_down = false; 29 } 30 31 private void Form1_MouseMove(object sender, MouseEventArgs e) 32 { 33 if(this.mouse_down==true) 34 { 35 this.Location = new Point(this.form_start_point.X + PointToScreen(e.Location).X - this.mouse_start_point.X, this.form_start_point.Y + PointToScreen(e.Location).Y - this.mouse_start_point.Y); 36 } 37 } 38 39 40 }
示例代码
http://pan.baidu.com/s/1hq0KTMG