具有无边框样式控件的可拖动WinForm(叠加)

时间:2014-09-22 08:41:50

标签: c# .net winforms overlay transparent

我正在开发一个简单的叠加应用程序,边框样式设置为“无” 我希望能够拖动我的Winform,无论我是否点击表格或其控制。

我找到了这个片段:

protected override void WndProc(ref Message m)
{
    switch(m.Msg)
    {
        case 0x84:
            base.WndProc(ref m);
            if ((int)m.Result == 0x1)
                m.Result = (IntPtr)0x2;
            return;
    }

    base.WndProc(ref m);
}

move a c# form without border style (by ShaneB)
如果我没有点击控件,这个片段允许我使表单可拖动 在触发mouseDown事件时,Form也应该可以在其他控件上拖动(如groupbox)。

备注:如果可能,仍然可以选中/取消选中复选框。如果最后一点应该是复杂的,我可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

我能够通过返回-1来解决我的问题。 (m.Result = (IntPtr)(-1);
非常感谢Hans Passant的建议。

我只需要从GroupBox派生一个新类并覆盖WndProc(),如下所示:

public sealed partial class CustomGroupBox : GroupBox
{
    protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case 0x84:
                base.WndProc(ref m);
                if ((int)m.Result == 0x1)
                    m.Result = (IntPtr)(-1);
                return;
        }

        base.WndProc(ref m);
    }
}