如何解决如何调整无边界MDI表单的大小?
我想要这个:
差不多,如果将BorderStyle
设置为None
和isMDIContainer = false;
的话,我的表单可以调整大小
但是,如果BordeStyle
设置为None
和isMDICOntainer = 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
不会覆盖主窗体的所有表面。
我发现这种颜色不好。因此,您可能想要更改适合MdiClient
背景的主表单的背景,或使用此方法在表单周围绘制rectangles
以便像正常情况一样调整大小。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。