【问题标题】:Moving window by click-drag on a control通过在控件上单击拖动来移动窗口
【发布时间】:2012-11-20 16:06:30
【问题描述】:

我有一个 WinForms 项目。我的窗口顶部有一个面板。我希望该面板能够在用户单击它然后拖动时移动窗口。

我该怎么做?

【问题讨论】:

  • Google 说这可能是重复的:stackoverflow.com/questions/30184/…
  • 不!它不是。我不希望用户能够在表单中的任何位置移动窗口。我希望用户能够仅从 panel1 控件移动窗口
  • 在谷歌中查找“Daniel Moth, Vista Glass”。我知道他的教程向您展示了一种允许您执行此操作的方法(它是一个 Win32 调用)。这也可能会引起一些兴趣codeproject.com/Articles/55180/…
  • 窗口有标题栏吗?
  • 所以窗口应该通过从标题栏和面板上点击拖动来移动?

标签: c# windows winforms


【解决方案1】:

将以下声明添加到您的课程中:

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HTCAPTION = 0x2;

[DllImport("User32.dll")]
public static extern bool ReleaseCapture();

[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

将其放入您的面板的MouseDown 事件中:

private void panel1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        ReleaseCapture();
        SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
    }
}

【讨论】:

  • 太棒了! +1 避免了试图以数学方式计算光标位置、偏移量等的抽象。但不,这个人只是直接跑进大楼,拿到冰淇淋甜筒并点击 Windows 消息系统。好的!谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 2011-11-03
  • 2014-03-04
相关资源
最近更新 更多