////////////////////
//C# Easel_Test.cs
////////////////////
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Reflection;					//Assemblyを使う為
using Atelier;								//Atelier.dllを使う

namespace WindowsFormsApp
{
	public partial class AppForm : Form
	{
		Panel panel;						//ピクチャー（ボックス）の枠となるPanel
		PictureBox picBox;					//ピクチャーボックスコントロール
		Button btn1, btn2, btn3, extbtn;	//ボタンコントロール
		//描画先とするEaselオブジェクトを作成する（同時にGraphics、Pen、Brushオブジェクトも作成する）
		Easel easel = new Easel();			//描画を行うEaselオブジェクト

		[STAThread]
		public static void Main()
		{
			AppForm ap = new AppForm();
			Application.Run(ap);
		}

		public AppForm()
		{
			Assembly myOwn = Assembly.GetEntryAssembly();
			this.Icon = Icon.ExtractAssociatedIcon(myOwn.Location);	//プログラムアイコンをフォームにつける
			this.Size = new Size(640, 480);
			this.MinimumSize = new Size(320, 190);
			this.Text = "Easel";
			this.Load += AppForm_Load;
		}

		private void AppForm_Load(object sender, EventArgs e)
		{
			//ボタン1
			btn1 = new Button();
			btn1.Location = new Point(ClientSize.Width - btn1.Width - 10, 10);
			btn1.Text = "ボタン1";
			btn1.Anchor = (AnchorStyles.Top | AnchorStyles.Right);
			btn1.Click += Button1_Click;
			this.Controls.Add(btn1);

			//ボタン2ボタン
			btn2 = new Button();
			btn2.Location = new Point(ClientSize.Width - btn2.Width - 10, btn1.Height + 20);
			btn2.Text = "ボタン2";
			btn2.Anchor = (AnchorStyles.Top | AnchorStyles.Right);
			btn2.Click += Button2_Click;
			this.Controls.Add(btn2);

			//ボタン3ボタン
			btn3 = new Button();
			btn3.Location = new Point(ClientSize.Width - btn3.Width - 10, btn1.Height + btn2.Height + 30);
			btn3.Text = "ボタン3";
			btn3.Anchor = (AnchorStyles.Top | AnchorStyles.Right);
			btn3.Click += Button3_Click;
			this.Controls.Add(btn3);

			//終了ボタン
			extbtn = new Button();
			extbtn.Location = new Point(ClientSize.Width - extbtn.Width - 10, ClientSize.Height - extbtn.Height - 20);
			extbtn.Text = "終了";
			extbtn.Anchor = (AnchorStyles.Bottom | AnchorStyles.Right);
			extbtn.Click += Button4_Click;
			this.Controls.Add(extbtn);

			//ピクチャーボックスコントロール in パネル
			panel = new Panel();		//フレームとなるPanelオブジェクトの作成
			panel.BorderStyle = BorderStyle.Fixed3D;
			panel.Location = new Point(10, 10);
			panel.Width = ClientSize.Width - btn1.Width - 30;
			panel.Height = ClientSize.Height - 20;
			panel.AutoScroll = true;			//スクロールバー付
			panel.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right);
			picBox = new PictureBox();			//枠の中のPictureオブジェクトの作成
			picBox.Location = new Point(0, 0);	//枠内の位置
			picBox.SizeMode = PictureBoxSizeMode.AutoSize;	//画像サイズでPictureBoxの大きさが変更される
			picBox.Image = easel.Canvas;		//PictureBoxにEaselオブジェクトを貼り付ける
			panel.Controls.Add(picBox);			//picBoxをpanelの子にする
			//FormにTPictureBox入りのPanelを追加
			this.Controls.Add(panel);
		}

		//終了処理
		protected override void OnFormClosing(FormClosingEventArgs e)
		{
			base.OnFormClosing(e);
			DialogResult dr = MessageBox.Show("終了しますか？", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
			if(dr == DialogResult.No)
			{
				e.Cancel = true;
			}
			else
				//PictureBoxのマネージド リソースとアンマネージド リソースを解放
				picBox.Dispose();
		}

		private void Button1_Click(object sender, EventArgs e)
		{
			//ボタン1
			easel.Clear(SystemColors.Control);
			//ボタンコントロールの描画
			ControlPaint.DrawButton(easel.gHandle, 10, 10, 50, 20, ButtonState.Normal);
			//キャプションボタンコントロールの閉じるボタンの描画
			ControlPaint.DrawCaptionButton(easel.gHandle, 70, 10, 15, 15, CaptionButton.Close, ButtonState.Pushed);
			//チェックボックスコントロールの描画
			ControlPaint.DrawCheckBox(easel.gHandle, 30, 40, 15, 15, ButtonState.All);
			//コンボボックスコントロールのドロップダウンボタンの描画
			ControlPaint.DrawComboButton(easel.gHandle, 50, 40, 15, 15, ButtonState.Normal);
			//オプションボタンコントロールの描画
			ControlPaint.DrawRadioButton(easel.gHandle, 70, 40, 15, 15, ButtonState.Checked);
			//スクロールバーコントロールのスクロールボタンの描画
			ControlPaint.DrawScrollButton(easel.gHandle, 90, 40, 15, 15, ScrollButton.Max,
			ButtonState.Checked);
			//3ステートチェックボックスコントロールの描画
			ControlPaint.DrawMixedCheckBox(easel.gHandle, 110, 40, 15, 15,
			ButtonState.Checked);
			//メニュー項目のコントロールのチェックマークの描画
			ControlPaint.DrawMenuGlyph(easel.gHandle, new Rectangle(130, 40, 15, 15), MenuGlyph.Checkmark);
			//ボタンスタイルコントロールの輪郭の描画
			ControlPaint.DrawBorder(easel.gHandle, new Rectangle(10, 60, 50, 20),
			Color.White, ButtonBorderStyle.Inset);
			//コントロールの3Dスタイルの輪郭の描画
			ControlPaint.DrawBorder3D(easel.gHandle, new Rectangle(70, 60, 50, 20),
			Border3DStyle.Raised, Border3DSide.All);
			//.NET Framework 2.0以降:ビジュアルスタイルの輪郭の描画
			ControlPaint.DrawVisualStyleBorder(easel.gHandle, new Rectangle(10, 10, 100, 100));
			//コンテナコントロールのグラブハンドルグリフの描画
			ControlPaint.DrawContainerGrabHandle(easel.gHandle, new Rectangle(10, 90, 15, 15));
			//標準の選択項目のグラブハンドルグリフの描画
			ControlPaint.DrawGrabHandle(easel.gHandle, new Rectangle(30, 90, 15, 15), true, true);
			//フォームのサイズグリップの描画
			ControlPaint.DrawSizeGrip(easel.gHandle, Color.White, new Rectangle(50, 90, 15, 15));
			//フォーカスを示す四角形の描画
			ControlPaint.DrawFocusRectangle(easel.gHandle, new Rectangle(10, 110, 40, 40));
			//1ピクセルの点線で構成されたグリッドの描画
			ControlPaint.DrawGrid(easel.gHandle, new Rectangle(60, 110, 40, 40), new Size(8, 5), Color.White);
			//画面に表示されるロックされた選択項目の枠の描画
			ControlPaint.DrawLockedFrame(easel.gHandle, new Rectangle(110, 110, 40, 40), true);
			//標準の選択項目の枠の描画
			ControlPaint.DrawSelectionFrame(easel.gHandle, true, new Rectangle(10, 160, 40, 40), new Rectangle(20, 170, 20, 20), Color.White);
			//Easelに表示する
			picBox.Image = easel.Canvas;
		}

		private void Button2_Click(object sender, EventArgs e)
		{
			//ボタン2
			easel.Clear(SystemColors.Window);
			//位置(10, 10)に200x160の長方形を描く
			easel.Box(10, 10, 200, 160);
			//位置(100, 100)に100x80の四角を描く
			easel.Box(220, 10, 320, 110, true);
			//円を描く
			easel.Circle(200, 200, 100);
			easel.Circle(200, 200, 30, true);
			//円弧(開始角度 0度、スイープ角度 90度)を描く
			easel.Arced(10, 20, 100, 80, 0, 90);
			//Easelに文字列を表示する
			easel.PrintText("うるせーぞ！", 50, 300, new StringFormat(StringFormatFlags.NoWrap));
			//EaselにEaselクラスのビットマップを表示する
			picBox.Image = easel.Canvas;
		}

		private void Button3_Click(object sender, EventArgs e)
		{
			//ボタン3
			//位置(0, 0)から100x100のBitmapを取得する
			easel.GetBMP(picBox, 0, 0, 99, 99);
			//位置(100, 100)に100x100のBitmapを表示する
			easel.PutBMP(100, 100);
			//システムアイコンを取得して位置(200, 200)に表示する
			Image img = Image.FromFile(".\\Icon.ico");
			easel.PutBMP(img, 200, 200, 232, 232);
			picBox.Image = easel.Canvas;
		}

		private void Button4_Click(object sender, EventArgs e)
		{
			//終了処理
			Close();
		}
	}
}
