RaUI/Source/ryControls/Gdu.WinFormUI/Forms/ControlBoxManager.cs
如果当时 870234f406 ### 2021-06-13更新
------
#### ryControls    V2.1.2106.1301
- *.[改进]点击窗口标题栏最大化时, 不覆盖桌面任务栏。
2021-06-15 09:42:16 +08:00

202 lines
6.8 KiB
C#

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using MGdu.WinFormUI.MyGraphics;
//忽略没有注释警告
#pragma warning disable 1591
namespace MGdu.WinFormUI
{
public class ControlBoxManager
{
private GMForm _owner;
private WLButton closeBtn;
private WLButton maxBtn;
private WLButton resBtn;
private WLButton minBtn;
#region event handler
private void CloseBtnClick(object sender, EventArgs e)
{
_owner.Close();
}
private void MaxBtnClick(object sender, EventArgs e)
{
var MaximumSize = _owner.MaximumSize;
var curScreen = Screen.FromControl(_owner);
_owner.MaximumSize = new Size(curScreen.WorkingArea.Width, curScreen.WorkingArea.Height);
_owner.WindowState = FormWindowState.Maximized;
_owner.MaximumSize = MaximumSize;
}
private void ResBtnClick(object sender, EventArgs e)
{
_owner.WindowState = FormWindowState.Normal;
}
private void MinBtnClick(object sender, EventArgs e)
{
_owner.WindowState = FormWindowState.Minimized;
}
#endregion
private void SetControlBoxColor()
{
closeBtn.ColorTable = _owner.XTheme.CloseBoxColor;
closeBtn.BackImageNormal = _owner.XTheme.CloseBoxBackImageNormal;
closeBtn.BackImageHover = _owner.XTheme.CloseBoxBackImageHover;
closeBtn.BackImagePressed = _owner.XTheme.CloseBoxBackImagePressed;
// max res box
if (_owner.MaximizeBox)
{
maxBtn.ColorTable = _owner.XTheme.MaxBoxColor;
maxBtn.BackImageNormal = _owner.XTheme.MaxBoxBackImageNormal;
maxBtn.BackImageHover = _owner.XTheme.MaxBoxBackImageHover;
maxBtn.BackImagePressed = _owner.XTheme.MaxBoxBackImagePressed;
resBtn.ColorTable = _owner.XTheme.MaxBoxColor;
resBtn.BackImageNormal = _owner.XTheme.ResBoxBackImageNormal;
resBtn.BackImageHover = _owner.XTheme.ResBoxBackImageHover;
resBtn.BackImagePressed = _owner.XTheme.ResBoxBackImagePressed;
}
// min box
if (_owner.MinimizeBox)
{
minBtn.ColorTable = _owner.XTheme.MinBoxColor;
minBtn.BackImageNormal = _owner.XTheme.MinBoxBackImageNormal;
minBtn.BackImageHover = _owner.XTheme.MinBoxBackImageHover;
minBtn.BackImagePressed = _owner.XTheme.MinBoxBackImagePressed;
}
}
private void BtnIni()
{
// close box
closeBtn = new WLButton(_owner);
closeBtn.Visible = true;
closeBtn.Bounds = _owner.CloseBoxRect;
closeBtn.Click += new EventHandler(CloseBtnClick);
closeBtn.ForePathGetter = new ButtonForePathGetter(
GraphicsPathHelper.CreateCloseFlagPath);
// max res box
if (_owner.MaximizeBox)
{
var curScreen = Screen.FromControl(_owner);
_owner.MaximumSize = new Size(curScreen.WorkingArea.Width, curScreen.WorkingArea.Height);
maxBtn = new WLButton(_owner);
resBtn = new WLButton(_owner);
if (_owner.WindowState == FormWindowState.Normal)
{
maxBtn.Visible = true;
resBtn.Visible = false;
}
else
{
maxBtn.Visible = false;
resBtn.Visible = true;
}
maxBtn.Bounds = _owner.MaxBoxRect;
resBtn.Bounds = _owner.MaxBoxRect;
maxBtn.Click += new EventHandler(MaxBtnClick);
maxBtn.ForePathGetter = new ButtonForePathGetter(
GraphicsPathHelper.CreateMaximizeFlagPath);
resBtn.Click += new EventHandler(ResBtnClick);
resBtn.ForePathGetter = new ButtonForePathGetter(
GraphicsPathHelper.CreateRestoreFlagPath);
}
// min box
if (_owner.MinimizeBox)
{
minBtn = new WLButton(_owner);
minBtn.Visible = true;
minBtn.Bounds = _owner.MinBoxRect;
minBtn.Click += new EventHandler(MinBtnClick);
minBtn.ForePathGetter = new ButtonForePathGetter(
GraphicsPathHelper.CreateMinimizeFlagPath);
}
SetControlBoxColor();
}
public ControlBoxManager(GMForm owner)
{
_owner = owner;
BtnIni();
}
public void FormResize()
{
if(maxBtn != null)
{
if (_owner.WindowState == FormWindowState.Normal)
{
maxBtn.Visible = true;
resBtn.Visible = false;
resBtn.State = GMButtonState.Normal;
}
else
{
resBtn.Visible = true;
maxBtn.Visible = false;
maxBtn.State = GMButtonState.Normal;
}
resBtn.Bounds = maxBtn.Bounds = _owner.MaxBoxRect;
}
if (minBtn != null)
minBtn.Bounds = _owner.MinBoxRect;
closeBtn.Bounds = _owner.CloseBoxRect;
}
public void MouseOperation(Point location, MouseOperationType type)
{
closeBtn.MouseOperation(location, type);
if (maxBtn != null && maxBtn.Visible)
maxBtn.MouseOperation(location, type);
if(resBtn!=null && resBtn.Visible)
resBtn.MouseOperation(location, type);
if(minBtn!=null)
minBtn.MouseOperation(location, type);
}
public void DrawBoxes(Graphics g)
{
if (_owner.ControlBox)
{
closeBtn.DrawButton(g);
if (_owner.MinimizeBox && minBtn != null)
minBtn.DrawButton(g);
if (_owner.MaximizeBox)
{
if (maxBtn != null & maxBtn.Visible)
maxBtn.DrawButton(g);
if (resBtn != null && resBtn.Visible)
resBtn.DrawButton(g);
}
}
}
public void ResetBoxColor()
{
SetControlBoxColor();
}
}
}