• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#之设置无边框后如何移动窗体(转)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

转载:http://www.cnblogs.com/techmango/archive/2012/03/31/2427523.html

 

第一种,利用windows的消息机制来实现:

首先﹐.定义鼠標左鍵按下時的Message标识﹔其次﹐在Form1_MouseDown方法﹐讓操作系統誤以為是按下标题栏。

1.定义鼠標左鍵按下時的Message标识

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,让窗体没有标题栏
 * 实现这个效果使用了三个事件:鼠标按下、鼠标弹起、鼠标移动
 * 鼠标按下时更改变量isMouseDown标记窗体可以随鼠标的移动而移动
 * 鼠标移动时根据鼠标的移动量更改窗体的location属性,实现窗体移动
 * 鼠标弹起时更改变量isMouseDown标记窗体不可以随鼠标的移动而移动
 */

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 }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap