如何使窗口可拖动(C# Winforms)?
Posted
技术标签:
【中文标题】如何使窗口可拖动(C# Winforms)?【英文标题】:How to make a window Draggable(C# Winforms)? 【发布时间】:2011-04-29 01:02:34 【问题描述】:我有形式。我已启用表单的透明度,并删除了它的标题栏和边框。在里面,我创建了一个自定义 UI,它具有与窗口相同的功能。基本上,我的想法是创建自定义窗口。
一切都按预期工作,但只有窗口拖动不起作用。我不确定如何启用它。我用谷歌搜索了这个。但我没有找到任何对我有用的信息。
请帮我实现这个窗口拖动。
【问题讨论】:
关于mouse
事件.... ??尝试使用mouse
事件来移动窗口。
默认的 winform 行为是通过您删除的标题栏拖动窗口。请注意,当用户看到无栏窗口时,他们不太可能拖动和移动它。如果您仍然想要这个,您必须自己实现它,例如使用 Cyril 的回答中提供的解决方案。
Move a window on keypress + mouse (like linux ALT + mouse down)的可能重复
Winforms - Click/drag anywhere in the form to move it as if clicked in the form caption的可能重复
【参考方案1】:
我已通过捕获 mousedown(在 mouseup 时取消捕获)然后 mousemove 来实现此行为。
只需移动窗体坐标(左、上),相当于鼠标移动的量(这些事件具有鼠标移动的量)。
这对我来说很好。
【讨论】:
【参考方案2】: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;
【讨论】:
【参考方案3】:最简单的方法是处理WM_NCHITTEST
消息并为自定义窗口的部分返回HTCAPTION
,这些部分的工作方式与普通窗口中的标题栏一样。 Windows 将完成剩下的工作。
【讨论】:
以上是关于如何使窗口可拖动(C# Winforms)?的主要内容,如果未能解决你的问题,请参考以下文章