using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; namespace AppLauncher.Windows.Forms { public class TForm : Form { protected readonly Color borderColour = Color.FromArgb(232, 231, 236); protected readonly int borderWidth = 1; protected readonly Color backColour = Color.FromArgb(254, 254, 254); protected readonly Color titleBarColour = Color.FromArgb(237, 240, 247); protected readonly Color titleBorderColour = Color.FromArgb(232, 231, 236); protected readonly Color titleColour = Color.FromArgb(32, 32, 33); protected readonly int titleBarHeight = 56; private bool isDragging = false; private Point startPosition = new Point(); protected bool isBusy = false; protected internal RyzStudio.Windows.Forms.TImageBox imageBox3; protected internal RyzStudio.Windows.Forms.TImageBox imageBox2; protected internal RyzStudio.Windows.Forms.TImageBox imageBox1; private NotifyIcon notifyIcon1; private Panel panel1; private ContextMenuStrip contextMenuStrip1; private ToolStripMenuItem exitToolStripMenuItem; private IContainer components; public TForm() : base() { InitializeComponent(); if (!this.DesignMode) { this.FormBorderStyle = FormBorderStyle.None; this.StartPosition = FormStartPosition.Manual; } this.BackColor = backColour; this.Padding = new Padding(0); notifyIcon1.Text = Application.ProductName; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.SuspendLayout(); imageBox3.Left = this.DisplayRectangle.Width - imageBox3.Width - 17; imageBox3.Top = 18; imageBox3.Anchor = (AnchorStyles.Top | AnchorStyles.Right); imageBox2.Left = imageBox3.Left - imageBox2.Width - 8; imageBox2.Top = 18; imageBox2.Anchor = (AnchorStyles.Top | AnchorStyles.Right); imageBox1.Left = imageBox2.Left - imageBox1.Width - 8; imageBox1.Top = 18; imageBox1.Anchor = (AnchorStyles.Top | AnchorStyles.Right); panel1.Left = this.DisplayRectangle.Left; panel1.Top = this.DisplayRectangle.Height - panel1.Height; panel1.Width = this.DisplayRectangle.Width; panel1.Anchor = (AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom); if (this.DesignMode) { imageBox1.Visible = imageBox2.Visible = imageBox3.Visible = false; panel1.Visible = false; } this.ResumeLayout(); } protected override void OnMouseClick(MouseEventArgs e) { base.OnMouseClick(e); bool isLabel = ((e.Location.X >= 0) && (e.Location.X <= this.Width) && (e.Location.Y >= 0) && (e.Location.Y <= titleBarHeight)); if (e.Button == MouseButtons.Left) { if (isLabel) { // do nothing } else { // do nothing } } else if (e.Button == MouseButtons.Right) { if (isLabel) { if (this.TitleContextMenuStrip != null) { this.TitleContextMenuStrip.Show(this, e.Location); } } else { // do nothing } } } protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); if (e.Button != MouseButtons.Left) { return; } isDragging = true; startPosition = e.Location; } protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if (isDragging) { int x = (this.Location.X + (e.Location.X - startPosition.X)); int y = (this.Location.Y + (e.Location.Y - startPosition.Y)); //this.Location = validateFormLocation(x, y); this.Location = new Point(x, y); } } protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); isDragging = false; } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics g = e.Graphics; Rectangle area = new Rectangle(this.DisplayRectangle.X, this.DisplayRectangle.Y, (this.DisplayRectangle.Width - borderWidth), (this.DisplayRectangle.Height - borderWidth)); // border g.DrawRectangle(new Pen(borderColour, borderWidth), area); area.Inflate((-1 * borderWidth), (-1 * borderWidth)); g.FillRectangle(new SolidBrush(titleBarColour), area.X, area.Y, (area.Width + area.X), titleBarHeight); g.DrawLine(new Pen(titleBorderColour, 1), area.X, (titleBarHeight + 1), (area.Width + area.X), (titleBarHeight + 1)); if (!DesignMode) g.DrawImageUnscaled(this.AppIcon, 17, 13); if (!DesignMode) TextRenderer.DrawText(g, Application.ProductName, new Font(this.Font.FontFamily, 14F), new Point(58, 17), titleColour); } protected override void OnResize(EventArgs e) { base.OnResize(e); this.Invalidate(); } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public override Color BackColor { get => base.BackColor; set => base.BackColor = value; } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public new FormBorderStyle FormBorderStyle { get => base.FormBorderStyle; set => base.FormBorderStyle = value; } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public new Padding Padding { get => base.Padding; set => base.Padding = value; } [Category("Appearance")] public ContextMenuStrip TitleContextMenuStrip { get; set; } = null; [Browsable(false)] public Image AppIcon { get; set; } = null; protected Point DefaultLocation { get { Point newPosition = new Point(Cursor.Position.X, Cursor.Position.Y); newPosition.X -= (this.Width / 2); newPosition.Y -= (this.Height / 2); newPosition.X = Math.Max(newPosition.X, Screen.PrimaryScreen.WorkingArea.Left); newPosition.Y = Math.Max(newPosition.Y, Screen.PrimaryScreen.WorkingArea.Top); return newPosition; } } private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TForm)); this.imageBox3 = new RyzStudio.Windows.Forms.TImageBox(); this.imageBox2 = new RyzStudio.Windows.Forms.TImageBox(); this.imageBox1 = new RyzStudio.Windows.Forms.TImageBox(); this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.panel1 = new System.Windows.Forms.Panel(); ((System.ComponentModel.ISupportInitialize)(this.imageBox3)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.imageBox2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).BeginInit(); this.contextMenuStrip1.SuspendLayout(); this.SuspendLayout(); // // imageBox3 // this.imageBox3.BackColor = System.Drawing.Color.Transparent; this.imageBox3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; this.imageBox3.ErrorImage = null; this.imageBox3.Image = global::AppLauncher.Properties.Resources20.close; this.imageBox3.ImageHover = global::AppLauncher.Properties.Resources20.close2; this.imageBox3.ImageNormal = global::AppLauncher.Properties.Resources20.close; this.imageBox3.ImageSelected = null; this.imageBox3.InitialImage = null; this.imageBox3.IsSelected = false; this.imageBox3.Location = new System.Drawing.Point(169, 12); this.imageBox3.Name = "imageBox3"; this.imageBox3.Size = new System.Drawing.Size(20, 20); this.imageBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; this.imageBox3.TabIndex = 146; this.imageBox3.TabStop = false; this.imageBox3.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox3_MouseClick); // // imageBox2 // this.imageBox2.BackColor = System.Drawing.Color.Transparent; this.imageBox2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; this.imageBox2.ErrorImage = null; this.imageBox2.Image = global::AppLauncher.Properties.Resources20.maximise; this.imageBox2.ImageHover = global::AppLauncher.Properties.Resources20.maximise; this.imageBox2.ImageNormal = global::AppLauncher.Properties.Resources20.maximise; this.imageBox2.ImageSelected = global::AppLauncher.Properties.Resources20.maximise2; this.imageBox2.InitialImage = null; this.imageBox2.IsSelected = false; this.imageBox2.Location = new System.Drawing.Point(139, 12); this.imageBox2.Name = "imageBox2"; this.imageBox2.Size = new System.Drawing.Size(20, 20); this.imageBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; this.imageBox2.TabIndex = 147; this.imageBox2.TabStop = false; this.imageBox2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox2_MouseClick); // // imageBox1 // this.imageBox1.BackColor = System.Drawing.Color.Transparent; this.imageBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; this.imageBox1.ErrorImage = null; this.imageBox1.Image = global::AppLauncher.Properties.Resources20.minimise; this.imageBox1.ImageHover = global::AppLauncher.Properties.Resources20.minimise2; this.imageBox1.ImageNormal = global::AppLauncher.Properties.Resources20.minimise; this.imageBox1.ImageSelected = null; this.imageBox1.InitialImage = null; this.imageBox1.IsSelected = false; this.imageBox1.Location = new System.Drawing.Point(109, 12); this.imageBox1.Name = "imageBox1"; this.imageBox1.Size = new System.Drawing.Size(20, 20); this.imageBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; this.imageBox1.TabIndex = 148; this.imageBox1.TabStop = false; this.imageBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox1_MouseClick); // // notifyIcon1 // this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1; this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); this.notifyIcon1.Visible = true; this.notifyIcon1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick); this.notifyIcon1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick); // // contextMenuStrip1 // this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.exitToolStripMenuItem}); this.contextMenuStrip1.Name = "contextMenuStrip1"; this.contextMenuStrip1.Size = new System.Drawing.Size(94, 26); // // exitToolStripMenuItem // this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; this.exitToolStripMenuItem.Size = new System.Drawing.Size(93, 22); this.exitToolStripMenuItem.Text = "E&xit"; this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); // // panel1 // this.panel1.BackColor = System.Drawing.Color.Transparent; this.panel1.Cursor = System.Windows.Forms.Cursors.SizeNS; this.panel1.Location = new System.Drawing.Point(109, 114); this.panel1.Margin = new System.Windows.Forms.Padding(0); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(200, 2); this.panel1.TabIndex = 149; this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown); this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove); this.panel1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseUp); // // AForm // this.ClientSize = new System.Drawing.Size(421, 321); this.Controls.Add(this.panel1); this.Controls.Add(this.imageBox1); this.Controls.Add(this.imageBox2); this.Controls.Add(this.imageBox3); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.Name = "AForm"; ((System.ComponentModel.ISupportInitialize)(this.imageBox3)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.imageBox2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).EndInit(); this.contextMenuStrip1.ResumeLayout(false); this.ResumeLayout(false); } private void imageBox1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { //this.WindowState = FormWindowState.Minimized; this.Visible = false; //notifyIcon1.Visible = true; } } private void imageBox2_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { //this.WindowState = ((this.WindowState == FormWindowState.Maximized) ? FormWindowState.Normal : FormWindowState.Maximized); //imageBox2.IsSelected = (this.WindowState == FormWindowState.Maximized); } else if (e.Button == MouseButtons.Right) { this.TopMost = !this.TopMost; if (this.TopMost) { imageBox2.Image = imageBox2.ImageNormal = Properties.Resources20.maximise3; } else { imageBox2.Image = imageBox2.ImageNormal = Properties.Resources20.maximise; } } } protected virtual void imageBox3_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { this.Close(); } } private void panel1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { isDragging = true; startPosition = e.Location; } } private void panel1_MouseUp(object sender, MouseEventArgs e) { isDragging = false; } private void panel1_MouseMove(object sender, MouseEventArgs e) { if (isDragging) { this.Size = new Size(this.Width, e.Y - startPosition.Y + this.Height); } } private void exitToolStripMenuItem_Click(object sender, EventArgs e) => this.Close(); private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { this.Visible = !this.Visible; } //notifyIcon1.Visible = !this.Visible; } } }