C#无边框窗体移动
程序员文章站
2022-07-14 12:18:04
...
拖动无边框窗体
相信大家都有遇到过这个问题,将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);
}
上一篇: C# 无边框窗体移动