欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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#基础