如何制作一个可拖动的窗口(C#Winforms)?

时间:2010-10-22 08:18:07

标签: c# .net winforms draggable

我有表格。我已经启用了表单上的透明度,我删除了它的标题栏和边框。在里面我创建了一个自定义UI,它具有与窗口相同的功能。基本上,我的想法是创建自定义窗口。

一切都按预期工作,但只有窗口拖动不起作用。我不知道如何启用它。我用Google搜索了这个。但我没有找到任何有用的信息。

请帮我实现此窗口拖动。

3 个答案:

答案 0 :(得分:5)

我通过捕获mousedown(在mouseup上取消捕获)然后mousemove实现了这种行为。

只需移动表格坐标(左,上),等效于鼠标移动(这些事件具有鼠标移动的数量)。

这对我来说很好。

答案 1 :(得分:1)

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;
     }
}

答案 2 :(得分:0)

最简单的方法是处理WM_NCHITTEST消息并返回HTCAPTION以查看自定义窗口的部分,这些部分的工作方式类似于常规窗口中的标题栏。 Windows将完成剩下的工作。