Histacom2/Histacom2.Engine/Template/WinClassic.cs

272 lines
9.9 KiB
C#
Raw Normal View History

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
2017-08-23 13:38:40 -04:00
namespace Histacom2.Engine.Template
{
public partial class WinClassic : Form
{
public WinClassic()
{
InitializeComponent();
2017-07-28 10:58:58 -04:00
DoubleBuffered = true;
}
2017-07-31 15:40:59 -04:00
public Font fnt;
2017-03-27 10:53:12 -04:00
2017-07-31 23:14:24 -04:00
public bool resizable = true;
public bool closeDisabled = false;
2017-07-31 15:40:59 -04:00
public bool isActive = true;
2017-08-29 09:00:58 -04:00
public bool Resizing = false;
public Bitmap ResizingBmp = null;
public const int WM_NCLBUTTONDOWN = 0xA1;
2017-07-28 10:58:58 -04:00
public const int WM_SYSCOMMAND = 0x0112;
public const int HT_CAPTION = 0x2;
2017-07-28 10:58:58 -04:00
private const int
HTLEFT = 10,
HTRIGHT = 11,
HTTOP = 12,
HTTOPLEFT = 13,
HTTOPRIGHT = 14,
HTBOTTOM = 15,
HTBOTTOMLEFT = 16,
HTBOTTOMRIGHT = 17;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd,
int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
private void Programtopbar_drag(object sender, MouseEventArgs e)
{
2017-05-07 17:58:48 -04:00
if (e.Button == MouseButtons.Left && max == false)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
private void closebutton_Click(object sender, EventArgs e)
{
if (!closeDisabled) this.Close();
}
2017-07-31 15:40:59 -04:00
private void WinClassic_Activated(object sender, EventArgs e)
{
isActive = true;
programtopbar.BackColor = SaveSystem.currentTheme.activeTitleBarColor;
Title.ForeColor = SaveSystem.currentTheme.activeTitleTextColor;
}
private void WinClassic_Deactivate(object sender, EventArgs e)
{
isActive = false;
programtopbar.BackColor = SaveSystem.currentTheme.inactiveTitleBarColor;
Title.ForeColor = SaveSystem.currentTheme.inactiveTitleTextColor;
}
private void right_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
2017-07-31 23:14:24 -04:00
if (resizable) this.Size = new Size(MousePosition.X - this.Location.X, this.Size.Height);
2017-08-29 09:00:58 -04:00
this.Invalidate();
}
}
private void left_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (resizable) this.Width = ((this.Width + this.Location.X) - Cursor.Position.X);
if (resizable)this.Location = new Point(Cursor.Position.X, this.Location.Y);
2017-08-29 09:00:58 -04:00
this.Invalidate();
}
}
private void bottom_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
2017-07-31 23:14:24 -04:00
if (resizable) this.Size = new Size(this.Size.Width, MousePosition.Y - this.Location.Y);
2017-08-29 09:00:58 -04:00
this.Invalidate();
}
}
private void bottomrightcorner_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (resizable) this.Size = new Size(MousePosition.X - this.Location.X, MousePosition.Y - this.Location.Y);
2017-08-29 09:00:58 -04:00
this.Invalidate();
}
}
private void bottomleftcorner_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (resizable) this.Width = ((this.Width + this.Location.X) - Cursor.Position.X);
if (resizable) this.Height = (Cursor.Position.Y - this.Location.Y);
if (resizable) this.Location = new Point(Cursor.Position.X, this.Location.Y);
2017-08-29 09:00:58 -04:00
this.Invalidate();
}
}
private void topleftcorner_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (resizable) this.Width = ((this.Width + this.Location.X) - Cursor.Position.X);
if (resizable) this.Location = new Point(Cursor.Position.X, this.Location.Y);
if (resizable) this.Height = ((this.Height + this.Location.Y) - Cursor.Position.Y);
if (resizable) this.Location = new Point(this.Location.X, Cursor.Position.Y);
2017-08-29 09:00:58 -04:00
this.Invalidate();
}
}
private void top_MouseMove(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
if(resizable) this.Height = ((this.Height + this.Location.Y) - Cursor.Position.Y);
if(resizable) this.Location = new Point(this.Location.X, Cursor.Position.Y);
2017-08-29 09:00:58 -04:00
this.Invalidate();
}
}
private void toprightcorner_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (resizable) this.Width = (Cursor.Position.X - this.Location.X);
if (resizable) this.Height = ((this.Location.Y - Cursor.Position.Y) + this.Height);
if (resizable) this.Location = new Point(this.Location.X, Cursor.Position.Y);
2017-08-29 09:00:58 -04:00
this.Update();
}
}
private void WinClassic_Paint(object sender, PaintEventArgs e)
{
if (Resizing)
{
MessageBox.Show("HIT IT");
e.Graphics.DrawImage(ResizingBmp, 0, 0, this.Width, this.Height);
}
}
private void border_MouseDown(object sender, MouseEventArgs e)
{
var cursor = this.PointToClient(Cursor.Position);
if (topleftcorner.ClientRectangle.Contains(cursor)) SendMessage(Handle, WM_SYSCOMMAND, 0xF004, 0);
else if (toprightcorner.ClientRectangle.Contains(cursor)) SendMessage(Handle, WM_SYSCOMMAND, 0xF005, 0);
else if (bottomleftcorner.ClientRectangle.Contains(cursor)) SendMessage(Handle, WM_SYSCOMMAND, 0xF007, 0);
else if (bottomrightcorner.ClientRectangle.Contains(cursor)) SendMessage(Handle, WM_SYSCOMMAND, 0xF008, 0);
else if (top.ClientRectangle.Contains(cursor)) SendMessage(Handle, WM_SYSCOMMAND, 0xF003, 0);
else if (left.ClientRectangle.Contains(cursor)) SendMessage(Handle, WM_SYSCOMMAND, 0xF001, 0);
else if (right.ClientRectangle.Contains(cursor)) SendMessage(Handle, WM_SYSCOMMAND, 0xF002, 0);
else if (bottom.ClientRectangle.Contains(cursor)) SendMessage(Handle, WM_SYSCOMMAND, 0xF006, 0);
/* Now we need to fix this weird artificating!
To lempamo: This is probably the best way I can think of the fix this
I can take a picture of the window as it is and then just draw that
and once you mouseup I will go back to the actual form
I'll have a boolean called Resizing which tells the form on paint to just draw the overlay!
*/
var screen = Screen.PrimaryScreen;
using (var bitmap = new Bitmap(this.Bounds.Width, this.Bounds.Height))
using (var graphics = Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(new Point(this.Bounds.Left, this.Bounds.Top), new Point(0, 0), this.Bounds.Size);
Resizing = true;
ResizingBmp = bitmap;
}
}
2017-07-28 10:58:58 -04:00
public bool max = false;
private void maximizebutton_Click(object sender, EventArgs e)
{
if (max == false)
{
this.right.Hide();
this.left.Hide();
this.bottom.Hide();
this.top.Hide();
this.bottomleftcorner.Hide();
this.bottomrightcorner.Hide();
this.topleftcorner.Hide();
this.toprightcorner.Hide();
this.Dock = DockStyle.Fill;
this.WindowState = FormWindowState.Maximized;
max = true;
maximizebutton.Image = Engine.Properties.Resources.WinClassicRestore;
}
else
{
this.right.Show();
this.left.Show();
this.bottom.Show();
this.top.Show();
this.bottomleftcorner.Show();
this.bottomrightcorner.Show();
this.topleftcorner.Show();
this.toprightcorner.Show();
this.Dock = DockStyle.None;
this.WindowState = FormWindowState.Normal;
max = false;
maximizebutton.Image = Engine.Properties.Resources.WinClassicMax;
}
}
// The rest of this code will automatically style the buttons on the form!
protected override void OnControlAdded(ControlEventArgs e)
{
base.OnControlAdded(e);
if (e.Control.GetType() == typeof(Button))
{
e.Control.MouseEnter += button_MouseEnter;
e.Control.MouseLeave += button_MouseLeave;
((Button)e.Control).FlatStyle = FlatStyle.Popup;
}
}
protected override void OnControlRemoved(ControlEventArgs e)
{
base.OnControlRemoved(e);
if (e.Control.GetType() == typeof(Button))
{
e.Control.MouseEnter -= button_MouseEnter;
e.Control.MouseLeave -= button_MouseLeave;
}
}
private void button_MouseEnter(object sender, EventArgs e)
{
var c = (Button)sender;
c.UseVisualStyleBackColor = false;
c.BackColor = Color.GhostWhite;
}
private void button_MouseLeave(object sender, EventArgs e)
{
var c = (Button)sender;
c.UseVisualStyleBackColor = true;
}
}
}