码迷,mamicode.com
首页 > Windows程序 > 详细

C#实现无标题栏窗体的拖动

时间:2015-08-26 17:19:07      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

  • 标题栏区域封装在Panel容器内(推荐方案),则编写该Panel的MouseDown事件处理函数。

 

  1. [DllImport("user32.dll", CharSet = CharSet.Unicode)]  
  2. public static extern IntPtr SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);  
  3.   
  4. [DllImport("user32.dll", CharSet = CharSet.Unicode)]  
  5. public static extern bool ReleaseCapture();  
  6.   
  7. private void panelCaption_MouseDown(object sender, MouseEventArgs e)  
  8. {              
  9.     const int WM_NCLBUTTONDOWN = 0x00A1;  
  10.     const int HTCAPTION = 2;  
  11.   
  12.     if (e.Button == MouseButtons.Left)  // 按下的是鼠标左键   
  13.     {  
  14.         ReleaseCapture();  
  15.         SendMessage(this.Handle, WM_NCLBUTTONDOWN, (IntPtr)HTCAPTION, IntPtr.Zero);    // 拖动窗体    
  16.     }  
  17. }  
[DllImport("user32.dll", CharSet = CharSet.Unicode)]public static extern IntPtr SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);[DllImport("user32.dll", CharSet = CharSet.Unicode)]public static extern bool ReleaseCapture();private void panelCaption_MouseDown(object sender, MouseEventArgs e){ const int WM_NCLBUTTONDOWN = 0x00A1; const int HTCAPTION = 2; if (e.Button == MouseButtons.Left) // 按下的是鼠标左键 { ReleaseCapture(); SendMessage(this.Handle, WM_NCLBUTTONDOWN, (IntPtr)HTCAPTION, IntPtr.Zero); // 拖动窗体 }}

 

  • 标题栏区域直接放置在窗体上,则重写该窗体的OnMouseDown函数。

 

  1. [DllImport("user32.dll", CharSet = CharSet.Unicode)]  
  2. public static extern IntPtr SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);  
  3.   
  4. [DllImport("user32.dll", CharSet = CharSet.Unicode)]  
  5. public static extern bool ReleaseCapture();  
  6.   
  7. protected override void OnMouseDown( MouseEventArgs e )  
  8. {  
  9.     const int WM_NCLBUTTONDOWN = 0x00A1;  
  10.     const int HTCAPTION = 2;  
  11.   
  12.     base.OnMouseDown( e );  
  13.     if (e.Button == MouseButtons.Left)  // 按下的是鼠标左键                  
  14.     {  
  15.         ReleaseCapture();   // 释放捕获                     
  16.         SendMessage(this.Handle, WM_NCLBUTTONDOWN, (IntPtr)HTCAPTION, IntPtr.Zero);    // 拖动窗体                  
  17.     }  
  18. }
技术分享

C#实现无标题栏窗体的拖动

标签:

原文地址:http://www.cnblogs.com/ninestart/p/4760829.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!