4种方法实现C#无标题栏窗体的移动

首先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

转载于:https://www.cnblogs.com/magicianlyx/p/4918153.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值