如何使窗口可拖动(C#Winforms)?
我有表格。我已经在表单上启用了透明度,并且删除了它的标题栏和边框。在里面,我创建了一个自定义UI,它具有与窗口相同的功能。基本上,我的想法是创建自定义窗口 一切正常,但只有窗口拖动不起作用。我不知道如何启用它。我在谷歌上搜索这个。但是我没有找到任何有用的信息如何使窗口可拖动(C#Winforms)?,c#,.net,winforms,draggable,C#,.net,Winforms,Draggable,我有表格。我已经在表单上启用了透明度,并且删除了它的标题栏和边框。在里面,我创建了一个自定义UI,它具有与窗口相同的功能。基本上,我的想法是创建自定义窗口 一切正常,但只有窗口拖动不起作用。我不知道如何启用它。我在谷歌上搜索这个。但是我没有找到任何有用的信息 请帮助我实现此窗口拖动。我通过捕获mousedown(在mouseup上取消捕获),然后捕获mousemove来实现此行为 只需移动表单坐标(左、上),相当于鼠标移动量(这些事件具有鼠标移动量) 这对我来说效果很好。最简单的方法是处理WM\
请帮助我实现此窗口拖动。我通过捕获mousedown(在mouseup上取消捕获),然后捕获mousemove来实现此行为 只需移动表单坐标(左、上),相当于鼠标移动量(这些事件具有鼠标移动量)
这对我来说效果很好。最简单的方法是处理
WM\u nchitest
消息,并为自定义窗口的部分返回HTCAPTION
,这些部分的工作方式与普通窗口中的标题栏类似。Windows将完成其余工作。wat关于mouse
events??尝试使用鼠标
事件来移动窗口。默认的winform行为是将窗口拖动到标题栏旁,然后将其删除。请注意,当用户看到无栏窗口时,他们不太可能拖动和移动它。如果你仍然想要这个,你必须自己实现它,例如使用Cyril的答案中提供的解决方案
class YourForm : Form
{
private const int WM_NCHITTEST = 0x84;
private const int HTCLIENT = 0x1;
private const int HTCAPTION = 0x2;
///
/// Handling the window messages
///
protected override void WndProc(ref Message message)
{
base.WndProc(ref message);
if (message.Msg == WM_NCHITTEST && (int)message.Result == HTCLIENT)
message.Result = (IntPtr)HTCAPTION;
}
}