[英]How to resize a borderless MDI form?
我要這個:
幾乎,如果BorderStyle
設置為None
並且isMDIContainer = false;
,我的表單可以調整大小isMDIContainer = false;
但是,如果BordeStyle
設置為None
並且isMDICOntainer = true
,我如何使我的表單BordeStyle
大小?
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, 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);
}
吉米的解釋是對的。 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
所有表面。
我覺得這個顏色不太好。 因此,您可能希望更改適合MdiClient
背景的主窗體的背景,或者使用這種方法在窗體周圍繪制rectangles
以像正常一樣調整大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.