#region Imports
|
|
using System;
|
using System.ComponentModel;
|
using System.Drawing;
|
using System.Windows.Forms;
|
|
#endregion
|
|
namespace DPumpHydr.WinFrmUI.RLT.Controls
|
{
|
#region NightControlBox
|
|
public class NightControlBox : Control
|
{
|
#region Fields
|
|
private bool hover_min, hover_max, hover_close;
|
|
#endregion
|
|
#region Custom Properties
|
|
private bool _EnableMaximize = true;
|
[Browsable(true)]
|
[Description("Determines whether the control should enable the use of the maximize button.")]
|
public bool EnableMaximizeButton
|
{
|
get => _EnableMaximize;
|
set
|
{
|
_EnableMaximize = value;
|
Invalidate();
|
}
|
}
|
|
private bool _EnableMinimize = true;
|
[Browsable(true)]
|
[Description("Determines whether the control should enable the use of the minimize button.")]
|
public bool EnableMinimizeButton
|
{
|
get => _EnableMinimize;
|
set
|
{
|
_EnableMinimize = value;
|
Invalidate();
|
}
|
}
|
|
private bool _DefaultLocation = true;
|
[Browsable(true)]
|
[Description("ControlBox set location to default.")]
|
public bool DefaultLocation
|
{
|
get => _DefaultLocation;
|
set
|
{
|
_DefaultLocation = value;
|
Invalidate();
|
}
|
}
|
|
private Color _EnableMinimizeColor = ColorTranslator.FromHtml("#A0A0A0");
|
[Browsable(true)]
|
[Description("Enabled is Minimize ForeColor.")]
|
public Color EnableMinimizeColor
|
{
|
get => _EnableMinimizeColor;
|
set
|
{
|
_EnableMinimizeColor = value;
|
Invalidate();
|
}
|
}
|
|
private Color _DisableMinimizeColor = ColorTranslator.FromHtml("#696969");
|
[Browsable(true)]
|
[Description("Disabled is Minimize ForeColor.")]
|
public Color DisableMinimizeColor
|
{
|
get => _DisableMinimizeColor;
|
set
|
{
|
_DisableMinimizeColor = value;
|
Invalidate();
|
}
|
}
|
|
private Color _MinimizeHoverColor = Color.FromArgb(15, Color.White);
|
[Browsable(true)]
|
[Description("Minimize is HoverColor.")]
|
public Color MinimizeHoverColor
|
{
|
get => _MinimizeHoverColor;
|
set
|
{
|
_MinimizeHoverColor = value;
|
Invalidate();
|
}
|
}
|
|
private Color _MinimizeHoverForeColor = Color.White;
|
[Browsable(true)]
|
[Description("Minimize is HoverForeColor.")]
|
public Color MinimizeHoverForeColor
|
{
|
get => _MinimizeHoverForeColor;
|
set
|
{
|
_MinimizeHoverForeColor = value;
|
Invalidate();
|
}
|
}
|
|
private Color _EnableMaximizeColor = ColorTranslator.FromHtml("#A0A0A0");
|
[Browsable(true)]
|
[Description("Enabled is Maximize ForeColor.")]
|
public Color EnableMaximizeColor
|
{
|
get => _EnableMaximizeColor;
|
set
|
{
|
_EnableMaximizeColor = value;
|
Invalidate();
|
}
|
}
|
|
private Color _DisableMaximizeColor = ColorTranslator.FromHtml("#696969");
|
[Browsable(true)]
|
[Description("Disabled is Maximize ForeColor.")]
|
public Color DisableMaximizeColor
|
{
|
get => _DisableMaximizeColor;
|
set
|
{
|
_DisableMaximizeColor = value;
|
Invalidate();
|
}
|
}
|
|
private Color _MaximizeHoverColor = Color.FromArgb(15, Color.White);
|
[Browsable(true)]
|
[Description("Maximize is HoverColor.")]
|
public Color MaximizeHoverColor
|
{
|
get => _MaximizeHoverColor;
|
set
|
{
|
_MaximizeHoverColor = value;
|
Invalidate();
|
}
|
}
|
|
private Color _MaximizeHoverForeColor = Color.White;
|
[Browsable(true)]
|
[Description("Maximize is HoverForeColor.")]
|
public Color MaximizeHoverForeColor
|
{
|
get => _MaximizeHoverForeColor;
|
set
|
{
|
_MaximizeHoverForeColor = value;
|
Invalidate();
|
}
|
}
|
|
private Color _EnableCloseColor = ColorTranslator.FromHtml("#A0A0A0");
|
[Browsable(true)]
|
[Description("Enabled is Close ForeColor.")]
|
public Color EnableCloseColor
|
{
|
get => _EnableCloseColor;
|
set
|
{
|
_EnableCloseColor = value;
|
Invalidate();
|
}
|
}
|
|
private Color _CloseHoverColor = ColorTranslator.FromHtml("#C75050");
|
[Browsable(true)]
|
[Description("Close is HoverColor.")]
|
public Color CloseHoverColor
|
{
|
get => _CloseHoverColor;
|
set
|
{
|
_CloseHoverColor = value;
|
Invalidate();
|
}
|
}
|
|
private Color _CloseHoverForeColor = Color.White;
|
[Browsable(true)]
|
[Description("Close is HoverForeColor.")]
|
public Color CloseHoverForeColor
|
{
|
get => _CloseHoverForeColor;
|
set
|
{
|
_CloseHoverForeColor = value;
|
Invalidate();
|
}
|
}
|
|
#endregion
|
|
#region Hidden Properties
|
|
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
public new Color ForeColor { get; set; }
|
|
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
public new ImageLayout BackgroundImageLayout { get; set; }
|
|
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
public new Image BackgroundImage { get; set; }
|
|
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
public new RightToLeft RightToLeft { get; set; }
|
|
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
public new ContextMenuStrip ContextMenuStrip { get; set; }
|
|
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
public new Size MinimumSize { get; set; }
|
|
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
public new Size MaximumSize { get; set; }
|
|
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
public new Font Font { get; set; }
|
|
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
public new Padding Padding { get; set; }
|
|
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
public new Padding Margin { get; set; }
|
|
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
public new string Tag { get; set; }
|
|
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
public new string Text { get; set; }
|
|
#endregion
|
|
#region EventArgs
|
|
protected override void OnResize(EventArgs e)
|
{
|
base.OnResize(e);
|
Size = new(139, 31);
|
}
|
|
protected override void OnMouseMove(MouseEventArgs e)
|
{
|
base.OnMouseMove(e);
|
if (e.X > 0 && e.X < 47 && e.Y > 0 && e.Y < 31)
|
{
|
hover_min = true;
|
hover_max = false;
|
hover_close = false;
|
}
|
else if (e.X > 46 && e.X < 94 && e.Y > 0 && e.Y < 31)
|
{
|
hover_min = false;
|
hover_max = true;
|
hover_close = false;
|
}
|
else if (e.X > 93 && e.X < 150 && e.Y > 0 && e.Y < 31)
|
{
|
hover_min = false;
|
hover_max = false;
|
hover_close = true;
|
}
|
else
|
{
|
hover_min = false;
|
hover_max = false;
|
hover_close = false;
|
}
|
|
Invalidate();
|
}
|
|
protected override void OnMouseLeave(EventArgs e)
|
{
|
base.OnMouseLeave(e);
|
hover_min = false;
|
hover_max = false;
|
hover_close = false;
|
|
Invalidate();
|
}
|
|
protected override void OnMouseDown(MouseEventArgs e)
|
{
|
base.OnMouseDown(e);
|
Focus();
|
Invalidate();
|
}
|
|
protected override void OnMouseUp(MouseEventArgs e)
|
{
|
base.OnMouseUp(e);
|
|
// Parent form
|
Form pf = FindForm();
|
|
if (_EnableMaximize)
|
{
|
if (hover_max & e.Button == MouseButtons.Left)
|
{
|
switch (pf.WindowState)
|
{
|
case FormWindowState.Normal:
|
pf.WindowState = FormWindowState.Maximized;
|
break;
|
case FormWindowState.Maximized:
|
pf.WindowState = FormWindowState.Normal;
|
break;
|
}
|
}
|
}
|
|
if (_EnableMinimize)
|
{
|
if (hover_min & e.Button == MouseButtons.Left)
|
{
|
pf.WindowState = FormWindowState.Minimized;
|
}
|
}
|
|
if (hover_close & e.Button == MouseButtons.Left)
|
{
|
Application.Exit();
|
}
|
}
|
|
#endregion
|
|
public NightControlBox()
|
{
|
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
|
BackColor = Color.Transparent;
|
DoubleBuffered = true;
|
Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
Cursor = Cursors.Hand;
|
}
|
|
protected override void OnCreateControl()
|
{
|
base.OnCreateControl();
|
try
|
{
|
if (DefaultLocation)
|
{
|
Location = new(Parent.Width - 139, 0); //Location = new(FindForm().Width - 139, 0);
|
}
|
}
|
catch (Exception)
|
{
|
//
|
}
|
}
|
|
protected override void OnPaint(PaintEventArgs e)
|
{
|
Graphics g = e.Graphics;
|
|
// This defines the size of the background that is drawn when
|
// the mouse moves over one of the three ControlBox buttons
|
Size btnBackgroundSize = new(46, Height);
|
|
// Minimize button
|
Font minimizeBtnFont = new("Tahoma", 12);
|
Point minimizeBtnPoint = new(15, 5);
|
SolidBrush minimizeBtnBrush = new(_EnableMinimize ? _EnableMinimizeColor : _DisableMinimizeColor);
|
|
if (hover_min && _EnableMinimize)
|
{
|
using (SolidBrush backColor = new(_MinimizeHoverColor))
|
{
|
g.FillRectangle(backColor, new Rectangle(new Point(1, 0), btnBackgroundSize));
|
}
|
|
minimizeBtnBrush = new(_MinimizeHoverForeColor);
|
}
|
|
g.DrawString("\u2212", minimizeBtnFont, minimizeBtnBrush, minimizeBtnPoint);
|
minimizeBtnBrush.Dispose();
|
minimizeBtnFont.Dispose();
|
|
// Maxmize button
|
Font maximizeBtnFont = new("Marlett", 9);
|
Point maximizeBtnPoint = new(63, 10);
|
SolidBrush maximizeBtnBrush = new(_EnableMaximize ? _EnableMaximizeColor : _DisableMaximizeColor);
|
|
if (hover_max && _EnableMaximize)
|
{
|
using (SolidBrush backColor = new(_MaximizeHoverColor))
|
{
|
g.FillRectangle(backColor, new Rectangle(new Point(47, 0), btnBackgroundSize));
|
}
|
|
maximizeBtnBrush = new(_MaximizeHoverForeColor);
|
}
|
|
g.DrawString(FindForm().WindowState != FormWindowState.Maximized ? "1" : "2", maximizeBtnFont, maximizeBtnBrush, maximizeBtnPoint);
|
|
maximizeBtnBrush.Dispose();
|
maximizeBtnFont.Dispose();
|
|
// Close button
|
Font closeBtnFont = new("Tahoma", 11);
|
Point closeBtnPoint = new(107, 6);
|
SolidBrush closeBtnBrush = new(_EnableCloseColor);
|
|
if (hover_close)
|
{
|
using (SolidBrush backColor = new(_CloseHoverColor))
|
{
|
g.FillRectangle(backColor, new Rectangle(new Point(93, 0), btnBackgroundSize));
|
}
|
|
closeBtnBrush = new(_CloseHoverForeColor);
|
}
|
|
g.DrawString("\u2A09", closeBtnFont, closeBtnBrush, closeBtnPoint);
|
closeBtnBrush.Dispose();
|
closeBtnFont.Dispose();
|
|
base.OnPaint(e);
|
}
|
}
|
|
#endregion
|
}
|