微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何调整无边界MDI表单的大小?

如何解决如何调整无边界MDI表单的大小?

我想要这个:

差不多,如果将BorderStyle设置为NoneisMDIContainer = false;的话,我的表单可以调整大小

但是,如果BordeStyle设置为NoneisMDICOntainer = true时,如何调整表单的大小?

https://gyazo.com/6fe87f127a3b2768c152e64d372593c1

这是一个示例。您可以看到该窗体可以调整大小。但是,只要MDI发挥作用,它就不再起作用。

这是当前代码

private const int cCaption = 62;
private const int cgrip = 16;
protected override void OnPaint(PaintEventArgs e)
{
    Rectangle rc = new Rectangle(this.ClientSize.Width - cgrip,this.ClientSize.Height - cgrip,cgrip,cgrip);
    ControlPaint.DrawSizegrip(e.Graphics,this.BackColor,rc);
        
    rc = new Rectangle(0,this.ClientSize.Width,cCaption);
        
    // e.Graphics.FillRectangle(Brushes.Blue,rc);
}

protected override void WndProc(ref Message m)
{
    if (m.Msg == 0x84)
    {  // Trap WM_NCHITTEST
        Point pos = new Point(m.LParam.ToInt32());
        pos = this.PointToClient(pos);
        if (pos.Y < cCaption)
        {
            m.Result = (IntPtr)2;  // HTCAPTION
            return;
        }
        if (pos.X >= this.ClientSize.Width - cgrip && pos.Y >= this.ClientSize.Height - cgrip)
        {
            m.Result = (IntPtr)17; // HTBottomrIGHT
            return;
        }
    }
    base.WndProc(ref m);
}

解决方法

Jimi的解释是正确的。 OnPaint事件只会在MainForm上绘制Rectangle,而您看到的是MdiClient控件。该控件覆盖MainForm的背景(就像您设置面板控件并设置Dock = fill一样),因此您看不到并单击右下角的矩形来调整大小。

一种可以查看并单击rectangle进行调整大小的方法是设置MainForm的填充,如下所示:

        protected override void OnClientSizeChanged(EventArgs e)
        {
            if (this.WindowState != lastState || lastState == FormWindowState.Normal)
            {
                lastState = this.WindowState;
                OnWindowStateChange(e);
            }
            base.OnClientSizeChanged(e);
        }

        private void OnWindowStateChange(EventArgs e)
        {
            if (WindowState == FormWindowState.Maximized)
            {
                Padding = new Padding(0);
            }
            else
            {
                Padding = new Padding(7);
            }
        }

因此,在正常的窗口状态(不是全屏)下,MdiClient不会覆盖主窗体的所有表面。

enter image description here

我发现这种颜色不好。因此,您可能想要更改适合MdiClient背景的主表单的背景,或使用此方法在表单周围绘制rectangles以便像正常情况一样调整大小。

How to resize borderless form from all edges

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。