移动的无边界形式

本文关键字:边界 移动 | 更新日期: 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。基本上,你在告诉底层窗口鼠标左键被按住了它需要对那个做出响应。这个响应通常是在拖拽窗口