2017-03-17 19:31:41 -04:00
|
|
|
|
using System;
|
2017-06-10 07:22:50 -04:00
|
|
|
|
using System.Drawing;
|
2017-03-26 13:28:05 -04:00
|
|
|
|
using System.Runtime.InteropServices;
|
2017-03-17 19:31:41 -04:00
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
2017-08-23 13:38:40 -04:00
|
|
|
|
namespace Histacom2.Engine.Template
|
2017-03-17 19:31:41 -04:00
|
|
|
|
{
|
|
|
|
|
public partial class WinClassic : Form
|
|
|
|
|
{
|
|
|
|
|
public WinClassic()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
2017-07-28 10:58:58 -04:00
|
|
|
|
DoubleBuffered = true;
|
2017-03-17 19:31:41 -04:00
|
|
|
|
}
|
2017-03-26 13:28:05 -04:00
|
|
|
|
|
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;
|
2017-03-27 20:48:31 -04:00
|
|
|
|
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;
|
2017-03-27 20:48:31 -04:00
|
|
|
|
|
2017-03-26 13:28:05 -04:00
|
|
|
|
public const int WM_NCLBUTTONDOWN = 0xA1;
|
2017-07-28 10:58:58 -04:00
|
|
|
|
public const int WM_SYSCOMMAND = 0x0112;
|
2017-03-26 13:28:05 -04:00
|
|
|
|
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;
|
|
|
|
|
|
2017-03-26 13:28:05 -04:00
|
|
|
|
[DllImportAttribute("user32.dll")]
|
|
|
|
|
public static extern int SendMessage(IntPtr hWnd,
|
|
|
|
|
int Msg, int wParam, int lParam);
|
|
|
|
|
[DllImportAttribute("user32.dll")]
|
|
|
|
|
public static extern bool ReleaseCapture();
|
|
|
|
|
|
2017-03-26 17:16:44 -04:00
|
|
|
|
private void Programtopbar_drag(object sender, MouseEventArgs e)
|
2017-03-26 13:28:05 -04:00
|
|
|
|
{
|
2017-05-07 17:58:48 -04:00
|
|
|
|
if (e.Button == MouseButtons.Left && max == false)
|
2017-03-26 13:28:05 -04:00
|
|
|
|
{
|
|
|
|
|
ReleaseCapture();
|
|
|
|
|
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void closebutton_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2017-03-27 20:48:31 -04:00
|
|
|
|
if (!closeDisabled) this.Close();
|
2017-03-26 13:28:05 -04:00
|
|
|
|
}
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2017-08-02 22:03:57 -04:00
|
|
|
|
|
2017-07-31 21:47:01 -04:00
|
|
|
|
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();
|
2017-07-31 21:47:01 -04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void left_MouseMove(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.Button == MouseButtons.Left)
|
|
|
|
|
{
|
2017-08-02 11:23:39 -04:00
|
|
|
|
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();
|
2017-07-31 21:47:01 -04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void bottom_MouseMove(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
2017-08-02 11:23:39 -04:00
|
|
|
|
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();
|
2017-07-31 21:47:01 -04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-08-02 11:23:39 -04:00
|
|
|
|
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();
|
2017-08-02 11:23:39 -04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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();
|
2017-08-02 11:23:39 -04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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();
|
2017-08-02 11:23:39 -04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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();
|
2017-08-02 11:23:39 -04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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-08-02 11:23:39 -04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-07-28 10:58:58 -04:00
|
|
|
|
public bool max = false;
|
2017-03-26 13:28:05 -04:00
|
|
|
|
|
|
|
|
|
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;
|
2017-03-27 14:38:53 -04:00
|
|
|
|
this.WindowState = FormWindowState.Maximized;
|
2017-03-26 13:28:05 -04:00
|
|
|
|
max = true;
|
2017-03-31 16:17:32 -04:00
|
|
|
|
maximizebutton.Image = Engine.Properties.Resources.WinClassicRestore;
|
2017-03-26 13:28:05 -04:00
|
|
|
|
}
|
|
|
|
|
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;
|
2017-03-27 14:38:53 -04:00
|
|
|
|
this.WindowState = FormWindowState.Normal;
|
2017-03-26 13:28:05 -04:00
|
|
|
|
max = false;
|
2017-03-31 16:17:32 -04:00
|
|
|
|
maximizebutton.Image = Engine.Properties.Resources.WinClassicMax;
|
2017-03-26 13:28:05 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
2017-06-10 07:22:50 -04:00
|
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
|
}
|
2017-03-17 19:31:41 -04:00
|
|
|
|
}
|
|
|
|
|
}
|