C#form不显示工具头,移动窗口方法

FormBorderStyle设为None,移动Winform窗口的两种方法

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

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

1.定义鼠標左鍵按下時的Message标识
   private const int WM_NCLBUTTONDOWN = 0XA1;   //.定义鼠標左鍵按下
   private const int HTCAPTION     = 2;

2.讓操作系統誤以為是按下标题栏

private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
   {   
    //為當前的應用程序釋放鼠標鋪獲
    ReleaseCapture();
    //發送消息﹐讓系統誤以為在标题栏上按下鼠標
    SendMessage((int)this.Handle,WM_NCLBUTTONDOWN,HTCAPTION,0);
   }

3.申明程序中所Windows的API函數
   [DllImport("user32.dll",EntryPoint="SendMessageA")]
   private static extern int SendMessage(int hwnd,int wMsg,int wParam,int lParam);

   [DllImport("user32.dll")]
   private static extern int ReleaseCapture();

 

第二种,通过自定鼠标左键按下时产生的事件:

 * 首先将窗体的边框样式修改为None,让窗体没有标题栏
 * 实现这个效果使用了三个事件:鼠标按下、鼠标弹起、鼠标移动
 * 鼠标按下时更改变量isMouseDown标记窗体可以随鼠标的移动而移动
 * 鼠标移动时根据鼠标的移动量更改窗体的location属性,实现窗体移动
 * 鼠标弹起时更改变量isMouseDown标记窗体不可以随鼠标的移动而移动
 */
private bool isMouseDown = false;
private Point FormLocation;     //form的location
private Point mouseOffset;      //鼠标的按下位置
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        isMouseDown = true;
        FormLocation = this.Location;
        mouseOffset = Control.MousePosition;
    }
}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
    isMouseDown = false;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    int _x = 0;
    int _y = 0;
    if (isMouseDown)
    {
        Point pt = Control.MousePosition;
        _x = mouseOffset.X - pt.X;
        _y = mouseOffset.Y - pt.Y;

        this.Location = new Point(FormLocation.X - _x, FormLocation.Y - _y);
    }

}


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值