#region Imports
|
|
using System;
|
using System.Drawing;
|
using System.Windows.Forms;
|
|
#endregion
|
|
namespace DPumpHydr.WinFrmUI.RLT.Controls
|
{
|
#region ControlBox
|
|
public class ControlBox : Control
|
{
|
#region Enums
|
|
public enum ButtonHoverState
|
{
|
Minimize,
|
Maximize,
|
Close,
|
None
|
}
|
|
#endregion
|
|
#region Variables
|
|
private ButtonHoverState ButtonHState = ButtonHoverState.None;
|
|
#endregion
|
|
#region Properties
|
|
private bool _DefaultLocation = true;
|
public bool DefaultLocation
|
{
|
get => _DefaultLocation;
|
set
|
{
|
_DefaultLocation = value;
|
Invalidate();
|
}
|
}
|
|
private bool _EnableMaximize = true;
|
public bool EnableMaximizeButton
|
{
|
get => _EnableMaximize;
|
set
|
{
|
_EnableMaximize = value;
|
Invalidate();
|
}
|
}
|
|
private bool _EnableMinimize = true;
|
public bool EnableMinimizeButton
|
{
|
get => _EnableMinimize;
|
set
|
{
|
_EnableMinimize = value;
|
Invalidate();
|
}
|
}
|
|
private bool _EnableHoverHighlight = false;
|
public bool EnableHoverHighlight
|
{
|
get => _EnableHoverHighlight;
|
set
|
{
|
_EnableHoverHighlight = value;
|
Invalidate();
|
}
|
}
|
|
public Color MinimizeHoverColor { get; set; } = Color.FromArgb(63, 63, 65);
|
public Color MaximizeHoverColor { get; set; } = Color.FromArgb(74, 74, 74);
|
public Color CloseHoverColor { get; set; } = Color.FromArgb(230, 17, 35);
|
|
#endregion
|
|
#region EventArgs
|
|
protected override void OnResize(EventArgs e)
|
{
|
base.OnResize(e);
|
Size = new(90, 25);
|
}
|
|
protected override void OnMouseMove(MouseEventArgs e)
|
{
|
base.OnMouseMove(e);
|
int X = e.Location.X;
|
int Y = e.Location.Y;
|
if (Y > 0 && Y < Height)
|
{
|
if (X is >= 0 and <= 30)
|
{
|
ButtonHState = ButtonHoverState.Minimize;
|
if (_EnableMinimize == true)
|
{
|
Cursor = Cursors.Hand;
|
}
|
else
|
{
|
Cursor = Cursors.No;
|
}
|
}
|
else if (X is > 30 and <= 60)
|
{
|
ButtonHState = ButtonHoverState.Maximize;
|
if (_EnableMaximize == true)
|
{
|
Cursor = Cursors.Hand;
|
}
|
else
|
{
|
Cursor = Cursors.No;
|
}
|
}
|
else if (X > 60 && X < Width)
|
{
|
ButtonHState = ButtonHoverState.Close;
|
Cursor = Cursors.Hand;
|
}
|
else
|
{
|
ButtonHState = ButtonHoverState.None;
|
Cursor = Cursors.Hand;
|
}
|
}
|
else
|
{
|
ButtonHState = ButtonHoverState.None;
|
Cursor = Cursors.Hand;
|
}
|
Invalidate();
|
}
|
|
protected override void OnMouseUp(MouseEventArgs e)
|
{
|
base.OnMouseDown(e);
|
switch (ButtonHState)
|
{
|
case ButtonHoverState.Close:
|
Parent.FindForm().Close();
|
break;
|
case ButtonHoverState.Minimize:
|
if (_EnableMinimize == true)
|
{
|
Parent.FindForm().WindowState = FormWindowState.Minimized;
|
/*foreach (Form Form in Application.OpenForms)
|
Form.WindowState = FormWindowState.Minimized;*/
|
}
|
break;
|
case ButtonHoverState.Maximize:
|
if (_EnableMaximize == true)
|
{
|
if (Parent.FindForm().WindowState == FormWindowState.Normal)
|
{
|
Parent.FindForm().WindowState = FormWindowState.Maximized;
|
}
|
else
|
{
|
Parent.FindForm().WindowState = FormWindowState.Normal;
|
}
|
}
|
break;
|
}
|
}
|
|
protected override void OnMouseLeave(EventArgs e)
|
{
|
base.OnMouseLeave(e);
|
ButtonHState = ButtonHoverState.None;
|
Invalidate();
|
}
|
|
protected override void OnMouseDown(MouseEventArgs e)
|
{
|
base.OnMouseDown(e);
|
Focus();
|
}
|
|
#endregion
|
|
public ControlBox() : base()
|
{
|
DoubleBuffered = true;
|
EnableHoverHighlight = true;
|
Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
Cursor = Cursors.Hand;
|
BackColor = Color.FromArgb(32, 34, 37);
|
ForeColor = Color.FromArgb(155, 155, 155);
|
}
|
|
protected override void OnCreateControl()
|
{
|
base.OnCreateControl();
|
try
|
{
|
if (DefaultLocation)
|
{
|
Location = new(Parent.Width - 100, 18);
|
}
|
}
|
catch (Exception)
|
{
|
//
|
}
|
}
|
|
protected override void OnPaint(PaintEventArgs e)
|
{
|
base.OnPaint(e);
|
Graphics G = e.Graphics;
|
G.Clear(base.BackColor);
|
|
//Close
|
G.DrawString("r", new Font("Marlett", 12), new SolidBrush(base.ForeColor), new Point(75, 5), new StringFormat { Alignment = StringAlignment.Center });
|
|
//Maximize
|
switch (Parent.FindForm().WindowState)
|
{
|
case FormWindowState.Maximized:
|
if (_EnableMaximize == true)
|
{
|
G.DrawString("2", new Font("Marlett", 12), new SolidBrush(base.ForeColor), new Point(46, 4), new StringFormat { Alignment = StringAlignment.Center });
|
}
|
else
|
{
|
G.DrawString("2", new Font("Marlett", 12), new SolidBrush(Color.FromArgb(55, 60, 50)), new Point(46, 4), new StringFormat { Alignment = StringAlignment.Center });
|
}
|
|
break;
|
case FormWindowState.Normal:
|
if (_EnableMaximize == true)
|
{
|
G.DrawString("1", new Font("Marlett", 12), new SolidBrush(base.ForeColor), new Point(46, 4), new StringFormat { Alignment = StringAlignment.Center });
|
}
|
else
|
{
|
G.DrawString("1", new Font("Marlett", 12), new SolidBrush(Color.FromArgb(55, 60, 50)), new Point(46, 4), new StringFormat { Alignment = StringAlignment.Center });
|
}
|
|
break;
|
}
|
|
//Minimize
|
if (_EnableMinimize == true)
|
{
|
G.DrawString("0", new Font("Marlett", 12), new SolidBrush(base.ForeColor), new Point(17, 0), new StringFormat { Alignment = StringAlignment.Center });
|
}
|
else
|
{
|
G.DrawString("0", new Font("Marlett", 12), new SolidBrush(Color.FromArgb(55, 60, 50)), new Point(17, 0), new StringFormat { Alignment = StringAlignment.Center });
|
}
|
|
if (_EnableHoverHighlight == true)
|
{
|
switch (ButtonHState)
|
{
|
/*case ButtonHoverState.None:
|
G.Clear(base.BackColor);
|
break;*/
|
case ButtonHoverState.Minimize:
|
if (_EnableMinimize == true)
|
{
|
G.FillRectangle(new SolidBrush(MinimizeHoverColor), new Rectangle(0, 0, 30, Height));
|
G.DrawString("0", new Font("Marlett", 12), new SolidBrush(Color.White), new Point(17, 0), new StringFormat { Alignment = StringAlignment.Center });
|
}
|
else
|
{
|
G.DrawString("0", new Font("Marlett", 12), new SolidBrush(Color.FromArgb(55, 60, 50)), new Point(17, 0), new StringFormat { Alignment = StringAlignment.Center });
|
}
|
|
break;
|
case ButtonHoverState.Maximize:
|
switch (Parent.FindForm().WindowState)
|
{
|
case FormWindowState.Maximized:
|
if (_EnableMaximize == true)
|
{
|
G.FillRectangle(new SolidBrush(MaximizeHoverColor), new Rectangle(30, 0, 30, Height));
|
G.DrawString("2", new Font("Marlett", 12), new SolidBrush(Color.White), new Point(46, 4), new StringFormat { Alignment = StringAlignment.Center });
|
}
|
else
|
{
|
G.DrawString("2", new Font("Marlett", 12), new SolidBrush(Color.FromArgb(55, 60, 50)), new Point(46, 4), new StringFormat { Alignment = StringAlignment.Center });
|
}
|
|
break;
|
case FormWindowState.Normal:
|
if (_EnableMaximize == true)
|
{
|
G.FillRectangle(new SolidBrush(MaximizeHoverColor), new Rectangle(30, 0, 30, Height));
|
G.DrawString("1", new Font("Marlett", 12), new SolidBrush(Color.White), new Point(46, 4), new StringFormat { Alignment = StringAlignment.Center });
|
}
|
else
|
{
|
G.DrawString("1", new Font("Marlett", 12), new SolidBrush(Color.FromArgb(55, 60, 50)), new Point(46, 4), new StringFormat { Alignment = StringAlignment.Center });
|
}
|
|
break;
|
}
|
break;
|
case ButtonHoverState.Close:
|
G.FillRectangle(new SolidBrush(CloseHoverColor), new Rectangle(60, 0, 30, Height));
|
G.DrawString("r", new Font("Marlett", 12), new SolidBrush(Color.White), new Point(75, 5), new StringFormat { Alignment = StringAlignment.Center });
|
break;
|
}
|
}
|
}
|
}
|
|
#endregion
|
}
|