移动的无边界形式
本文关键字:边界 移动 | 更新日期: 2023-09-27 17:49:33
我需要你的帮助与一些代码我发现在网上很久以前。遗憾的是,我不记得它是从哪里来的:(为了在我的项目中移动无边界表单,我使用以下代码:
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);
}
}
我的问题是我不完全理解代码是如何工作的。据我所知,当在表单上单击鼠标按钮时,事件被激活。如果鼠标单击是左键单击,则遵循查询。从那里我不知道下面的代码是做什么的:(
这个。Capture=false告诉操作系统停止捕获鼠标事件。该消息。Create创建要发送到当前应用程序的消息循环的新消息。0xA1是WM_NCLBUTTONDOWN;这是一个非客户端左键向下消息。这意味着它模拟了在缺失的边框上点击鼠标左键。
Windows将继续执行剩余的进程。
在最基本的层面上,你正在发送一个消息到你的窗口,并让它处理它。
你给它一个0xA1 (WM_NCLBUTTONDOWN),并通过发送一个0x02作为参数(HTCAPTION),你愚弄的过程认为你是在标题栏上。在标题栏上拖动可以移动窗口,因此您可以使用代码拖动窗口。
在:
c#:如何拖动窗体和它的's控件?
http://www.catch22.net/tuts/win32-tips-tricks你基本上是在向窗口发布消息。一个小小的MSDN研究发现,你发布的消息是WM_NCLBUTTONDOWN。基本上,你在告诉底层窗口鼠标左键被按住了它需要对那个做出响应。这个响应通常是在拖拽窗口