移动无边界表格

时间:2015-05-18 17:16:12

标签: c# move borderless

我需要你帮助我很久以前在网上找到的一些代码。可悲的是我不记得它在哪里:(要在我的项目中移动无边框表单,我使用此代码剪切:

protected override void OnMouseDown(MouseEventArgs e)
{
     base.OnMouseDown(e);
     if (e.Button == System.Windows.Forms.MouseButtons.Left)
          {
               this.Capture = false;
               Message msg = Message.Create(this.Handle, 0XA1, new IntPtr(2), IntPtr.Zero);
               this.WndProc(ref msg);
          }
}

我的问题是我不完全理解代码是如何工作的。据我所知,当在表单上单击鼠标按钮时,事件被激活。如果鼠标单击是左键单击,则按照查询进行操作。从那里我不知道下面的代码是做什么的:(

3 个答案:

答案 0 :(得分:2)

this.Capture = false告诉操作系统停止捕获鼠标事件。 Message.Create创建要发送到当前应用程序的消息循环的新消息。 0xA1是WM_NCLBUTTONDOWN;这是一个非客户端左键按下消息。这意味着它模拟了在缺失边框上单击鼠标左键。

然后,Windows会接收剩余的过程。

答案 1 :(得分:1)

在基本级别,您正在向窗口发送消息并让它处理它。

你给它一个0xA1(WM_NCLBUTTONDOWN)并通过发送一个0x02作为参数(HTCAPTION)你欺骗过程以为你在标题栏上。标题栏上的拖动会移动窗口,因此您可以使用代码拖动窗口。

这样做的样本:

C#: How to drag a from by the form and it's controls?

http://www.catch22.net/tuts/win32-tips-tricks

答案 2 :(得分:0)

您基本上是在窗口上发布消息。一个小的MSDN研究发现你发布的消息是WM_NCLBUTTONDOWN。基本上,你告诉底层窗口按下鼠标左键,它需要响应。这种反应通常恰好拖延了窗口。