我需要你帮助我很久以前在网上找到的一些代码。可悲的是我不记得它在哪里:(要在我的项目中移动无边框表单,我使用此代码剪切:
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);
}
}
我的问题是我不完全理解代码是如何工作的。据我所知,当在表单上单击鼠标按钮时,事件被激活。如果鼠标单击是左键单击,则按照查询进行操作。从那里我不知道下面的代码是做什么的:(
答案 0 :(得分:2)
this.Capture = false告诉操作系统停止捕获鼠标事件。 Message.Create创建要发送到当前应用程序的消息循环的新消息。 0xA1是WM_NCLBUTTONDOWN;这是一个非客户端左键按下消息。这意味着它模拟了在缺失边框上单击鼠标左键。
然后,Windows会接收剩余的过程。
答案 1 :(得分:1)
在基本级别,您正在向窗口发送消息并让它处理它。
你给它一个0xA1(WM_NCLBUTTONDOWN)并通过发送一个0x02作为参数(HTCAPTION)你欺骗过程以为你在标题栏上。标题栏上的拖动会移动窗口,因此您可以使用代码拖动窗口。
这样做的样本:
答案 2 :(得分:0)
您基本上是在窗口上发布消息。一个小的MSDN研究发现你发布的消息是WM_NCLBUTTONDOWN。基本上,你告诉底层窗口按下鼠标左键,它需要响应。这种反应通常恰好拖延了窗口。