2D Graphics C#

/*
GDI+ Programming in C# and VB .NET
by Nick Symmonds
Publisher: Apress
ISBN: 159059035X
*/
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace IconImageDraw_c
{
    /// 
    /// Summary description for IconImageDraw.
    /// 

  public class IconImageDraw : System.Windows.Forms.Form
  {
    /// 
    /// Required designer variable.
    /// 

    private System.ComponentModel.Container components = null;
    public IconImageDraw()
    {
      //
      // Required for Windows Form Designer support
      //
      InitializeComponent();
      this.MouseMove += new MouseEventHandler(this.DrawBox);
      this.MouseDown += new MouseEventHandler(this.StartBox);
      this.MouseUp += new MouseEventHandler(this.EndBox);
    }
    /// 
    /// Clean up any resources being used.
    /// 

    protected override void Dispose( bool disposing )
    {
      if( disposing )
      {
        if (components != null) 
        {
          components.Dispose();
        }
      }
      base.Dispose( disposing );
    }
        #region Windows Form Designer generated code
    /// 
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// 

    private void InitializeComponent()
    {
      // 
      // IconImageDraw
      // 
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(492, 373);
      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
      this.MinimizeBox = false;
      this.Name = "IconImageDraw";
      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
      this.Text = "IconImageDraw";
      this.Load += new System.EventHandler(this.IconImageDraw_Load);
    }
        #endregion
    /// 
    /// The main entry point for the application.
    /// 

    /// 
    //"R" holds the image, "Box" is the new image home currently being 
    //drawn by holding the mouse down and dragging
    private Rectangle R = Rectangle.Empty;
    private Rectangle Box = Rectangle.Empty;
    private Image I = Image.FromFile("sample.jpg");
    private Icon ThisIcon = new Icon("usa.ico");
    private bool OK2Paint = false;
    [STAThread]
    static void Main() 
    {
      Application.Run(new IconImageDraw());
    }
    private void IconImageDraw_Load(object sender, System.EventArgs e)
    {
    }
    protected override void OnPaint ( PaintEventArgs e )
    {
      //Always draw the icon
      e.Graphics.DrawIcon(ThisIcon, 1, 1);
      //Bail if rectangle is empty
      if ( R == Rectangle.Empty )
        return;
      if ( !OK2Paint )
        return;
      Pen P = new Pen(Brushes.Black, 3);
      e.Graphics.DrawRectangle(P, R);
      // Draw image based on rectangle.
      e.Graphics.DrawImage(I, R);
      P.Dispose();
    }
    private void DrawBox ( System.Object sender , MouseEventArgs m )
    {
      //Prints the x,y coordinates directly on the screen
      Graphics G = this.CreateGraphics();
      Rectangle TextR = new Rectangle(10, this.Height-50, 100, 20 );
      SolidBrush B = new SolidBrush(this.BackColor);
      G.FillRectangle(B, TextR);
      G.DrawString ( m.X.ToString() + ", " + m.Y.ToString(), 
                      new Font("Arial", 10),
                      Brushes.Black, TextR, StringFormat.GenericDefault );
      B.Dispose();
      //Draw the box as the mouse drags
      if ( m.Button == MouseButtons.Left )
      {
        if ( Box != Rectangle.Empty )
        {
          Pen P = new Pen(new SolidBrush(this.BackColor),1);
          G.DrawRectangle ( P, Box );
          P.Dispose();
        }
        Box = new Rectangle ( R.X, R.Y, m.X - R.X, m.Y - R.Y );
        G.DrawRectangle( Pens.Black, Box );
      }
    }
    private void StartBox( System.Object sender , MouseEventArgs m )
    {
      if ( m.Button == MouseButtons.Left )
      {
        R.X=m.X;
        R.Y=m.Y;
        OK2Paint = false;
      }
    }
    private void EndBox( System.Object sender , MouseEventArgs m )
    {
      R.Width = m.X - R.X;
      R.Height = m.Y - R.Y;
      OK2Paint = true;
      this.Refresh();
    }
  }
}
           
         
  
IconImageDraw-c.zip( 12 k)