using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Project1
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		public System.Windows.Forms.TextBox Text1;
		public System.Windows.Forms.Button Command2;
		public System.Windows.Forms.Button Command1;
		private AxIMAGEKIT7Lib.AxImageKit ImageKit1;
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
			this.Text1 = new System.Windows.Forms.TextBox();
			this.Command2 = new System.Windows.Forms.Button();
			this.Command1 = new System.Windows.Forms.Button();
			this.ImageKit1 = new AxIMAGEKIT7Lib.AxImageKit();
			((System.ComponentModel.ISupportInitialize)(this.ImageKit1)).BeginInit();
			this.SuspendLayout();
			// 
			// Text1
			// 
			this.Text1.AcceptsReturn = true;
			this.Text1.AutoSize = false;
			this.Text1.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(255)), ((System.Byte)(255)), ((System.Byte)(192)));
			this.Text1.Cursor = System.Windows.Forms.Cursors.IBeam;
			this.Text1.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.Text1.ForeColor = System.Drawing.Color.FromArgb(((System.Byte)(192)), ((System.Byte)(0)), ((System.Byte)(0)));
			this.Text1.Location = new System.Drawing.Point(8, 0);
			this.Text1.MaxLength = 0;
			this.Text1.Multiline = true;
			this.Text1.Name = "Text1";
			this.Text1.RightToLeft = System.Windows.Forms.RightToLeft.No;
			this.Text1.Size = new System.Drawing.Size(545, 65);
			this.Text1.TabIndex = 6;
			this.Text1.Text = @"The ImageKit allows you to scan using the Twain scan driver's interface or to suppress that interface and build your own. In this sample, the installed scanners are listed. Once a scanner is selected, the scan driver's interface is used to scan an image. In the AfterScan event, the image is saved in bmp format and displayed in the ImageKit Control. For details about suppressing the scan driver's interface, refer to the next sample.";
			// 
			// Command2
			// 
			this.Command2.BackColor = System.Drawing.SystemColors.Control;
			this.Command2.Cursor = System.Windows.Forms.Cursors.Default;
			this.Command2.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.Command2.ForeColor = System.Drawing.SystemColors.ControlText;
			this.Command2.Location = new System.Drawing.Point(464, 424);
			this.Command2.Name = "Command2";
			this.Command2.RightToLeft = System.Windows.Forms.RightToLeft.No;
			this.Command2.Size = new System.Drawing.Size(89, 41);
			this.Command2.TabIndex = 5;
			this.Command2.Text = "End";
			this.Command2.Click += new System.EventHandler(this.Command2_Click);
			// 
			// Command1
			// 
			this.Command1.BackColor = System.Drawing.SystemColors.Control;
			this.Command1.Cursor = System.Windows.Forms.Cursors.Default;
			this.Command1.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.Command1.ForeColor = System.Drawing.SystemColors.ControlText;
			this.Command1.Location = new System.Drawing.Point(464, 80);
			this.Command1.Name = "Command1";
			this.Command1.RightToLeft = System.Windows.Forms.RightToLeft.No;
			this.Command1.Size = new System.Drawing.Size(89, 41);
			this.Command1.TabIndex = 4;
			this.Command1.Text = "Scan";
			this.Command1.Click += new System.EventHandler(this.Command1_Click);
			// 
			// ImageKit1
			// 
			this.ImageKit1.Location = new System.Drawing.Point(8, 72);
			this.ImageKit1.Name = "ImageKit1";
			this.ImageKit1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("ImageKit1.OcxState")));
			this.ImageKit1.Size = new System.Drawing.Size(449, 393);
			this.ImageKit1.TabIndex = 7;
			this.ImageKit1.AfterScan += new AxIMAGEKIT7Lib._IImageKitEvents_AfterScanEventHandler(this.ImageKit1_AfterScan);
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(561, 472);
			this.Controls.Add(this.ImageKit1);
			this.Controls.Add(this.Text1);
			this.Controls.Add(this.Command2);
			this.Controls.Add(this.Command1);
			this.Name = "Form1";
			this.Text = "Getting Started Scanning - Scan Driver\'s UI";
			this.Load += new System.EventHandler(this.Form1_Load);
			((System.ComponentModel.ISupportInitialize)(this.ImageKit1)).EndInit();
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void Form1_Load(object sender, System.EventArgs e)
		{
		
		}

		private void Command1_Click(object sender, System.EventArgs e)
		{
			bool Ret;
			int[] index = new int[1];
		
			//STEP1: Initialize the TWAIN scan process...
			Ret = ImageKit1.Scan.Initialize(Handle.ToInt32(), 1, 0, "1.00", "NEWTONE ", "ImageKit", "IK7Scan Sample");
			if (Ret == false) 
			{
				MessageBox.Show("Unable to initialize TWAIN scan process");
				return;
			}
			
			//STEP2: Select the scan device...
			// You can list the installed scan devices this way...
			ImageKit1.Scan.Select();
			
			//or if you know the scan device name then you can set it this way..
			//ImageKit1.Scan.DsName = "HP Precisionscan Pro3.1";
			
			//STEP3: Choose the user interface...
			//here we are using the scan driver's user interface...
			ImageKit1.Scan.UiMode = IMAGEKIT7Lib.ScanUIModeConstants.ikScanUICLOSE;
			
			//STEP4: Execute the scan (note: the index value is a dummy variable)...
			Ret = ImageKit1.Scan.Exec(ref index[0]);
			
			//STEP5: Terminate the TWAIN scan process...
			Ret = ImageKit1.Scan.Terminate();
		}

		private void Command2_Click(object sender, System.EventArgs e)
		{
			this.Close();
		}

		private void ImageKit1_AfterScan(object sender, AxIMAGEKIT7Lib._IImageKitEvents_AfterScanEvent e)
		{
			//The scanned image data is returned in the DibHandle which is cleared once this event finishes.
			//To save and/or display the scanned image data, make a persistant copy and
			//pass this to the ImageKit Control's ImageHandle then display or save as usual.
			ImageKit1.ImageHandle = ImageKit1.CopyImage(e.dibHandle);
			
			//save the file in bmp format
			ImageKit1.File.FileName = @"C:\test.bmp";
			ImageKit1.File.SaveFile(IMAGEKIT7Lib.SaveFileConstants.ikSaveBMP, 0);
			
			//display the image
			ImageKit1.Display(IMAGEKIT7Lib.DispModeConstants.ikScale);
		}
	}
}
