C#无边框窗体移动

混江龙づ霸主 提交于 2019-12-10 17:57:21

拖动无边框窗体

相信大家都有遇到过这个问题,将winform窗体BorderStyle设置为None时,窗体是无法移动的,解决这个问题可以参考下面代码;
首先建立一个Win32类文件
命名空间引用如下:

using System.Runtime.InteropServices;

在类的内部定义如下代码,用来记录Windows消息类型及附加消息:

public const int WM_SYSCOMMAND = 0x0112;        //该变量表示将向Windows发送的消息类型
public const int SC_MOVE = 0xF010;              //该变量表示发送消息的附加消息
public const int HTCAPTION = 0x0002;             //该变量表示发送消息的附件消息

在类的内部导入windows系统API函数ReleaseCapture,用来释放被当前线程中某个窗口捕获的光标:

//用来释放当前被线程中某个窗口捕获的光标
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();

在类的内部导入windows系统API函数SendMessage,用来向指定的窗体发生windows消息:

//向指定窗体发生windows消息
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwdn,int wMsg,int mParam,int lParam);

调用

然后就是在看你需要拖动哪个控件移动窗体,我的是Panel控件,只需要在Panel控件的事件MouseDown下调用代码即可,调用代码如下:

//【鼠标在panel1控件上按下时发生】
private void panelTitle_MouseDown(object sender, MouseEventArgs e)
{
     Win32.ReleaseCapture();
     Win32.SendMessage(this.Handle, Win32.WM_SYSCOMMAND, Win32.SC_MOVE + Win32.HTCAPTION, 0);
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!