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.Drawing2D;
using System.Drawing.Imaging;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace Animate_c
{
    public class AnimateDemo : System.Windows.Forms.Form
    {
    private System.Windows.Forms.Button cmdGo;
        /// 
        /// Required designer variable.
        /// 

        /// 
    Bitmap RotatingBlocks;
    Point DrawHere;
    Rectangle InvalidRect;
    bool InProcess = false;
    private System.Windows.Forms.Button cmdStop;
        private System.ComponentModel.Container components = null;
        public AnimateDemo()
        {
          InitializeComponent();
    
          RotatingBlocks = new Bitmap("blocks.gif");
          DrawHere = new Point(10, 10);
          InvalidRect = new Rectangle(DrawHere, RotatingBlocks.Size);
    
          this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);
          this.SetStyle(ControlStyles.DoubleBuffer,true);
          cmdStop.Enabled = false;
       }
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null) 
                {
                    components.Dispose();
                }
            }
            RotatingBlocks.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()
        {
      this.cmdGo = new System.Windows.Forms.Button();
      this.cmdStop = new System.Windows.Forms.Button();
      this.SuspendLayout();
      // 
      // cmdGo
      // 
      this.cmdGo.Location = new System.Drawing.Point(160, 120);
      this.cmdGo.Name = "cmdGo";
      this.cmdGo.Size = new System.Drawing.Size(64, 32);
      this.cmdGo.TabIndex = 0;
      this.cmdGo.Text = "Animate";
      this.cmdGo.Click += new System.EventHandler(this.cmdGo_Click);
      // 
      // cmdStop
      // 
      this.cmdStop.Location = new System.Drawing.Point(240, 120);
      this.cmdStop.Name = "cmdStop";
      this.cmdStop.Size = new System.Drawing.Size(56, 32);
      this.cmdStop.TabIndex = 1;
      this.cmdStop.Text = "Stop";
      this.cmdStop.Click += new System.EventHandler(this.cmdStop_Click);
      // 
      // AnimateDemo
      // 
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(312, 157);
      this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                  this.cmdStop,
                                                                  this.cmdGo});
      this.MaximizeBox = false;
      this.MinimizeBox = false;
      this.Name = "AnimateDemo";
      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
      this.Text = "AnimateDemo";
      this.Load += new System.EventHandler(this.AnimateDemo_Load);
      this.ResumeLayout(false);
    }
        #endregion
        /// 
        /// The main entry point for the application.
        /// 

        [STAThread]
        static void Main() 
        {
            Application.Run(new AnimateDemo());
        }
    private void AnimateDemo_Load(object sender, System.EventArgs e)
    {
    }
    private void OnFrameChanged(object o, EventArgs e) 
    {
      //Force a call to the Paint event handler.
      this.Invalidate(InvalidRect);
    }
    protected override void OnPaint(PaintEventArgs e) 
    {
      if ( !InProcess )
        return;
      
      //Get the next block ready to display.
      ImageAnimator.UpdateFrames(RotatingBlocks);
      //Draw the next frame in the RotatingBlocks animation.
      e.Graphics.DrawImage(RotatingBlocks, DrawHere);
    }
    private void cmdGo_Click(object sender, System.EventArgs e)
    {
      if (!InProcess) 
      {
        if ( ImageAnimator.CanAnimate(RotatingBlocks) )
        {
          //Begin the animation only once.
          ImageAnimator.Animate(RotatingBlocks, 
                                new EventHandler(this.OnFrameChanged));
          InProcess = true;
          cmdGo.Enabled = false;
          cmdStop.Enabled = true;
        }
      }
    }
    private void cmdStop_Click(object sender, System.EventArgs e)
    {
      ImageAnimator.StopAnimate(RotatingBlocks, 
                                new EventHandler(this.OnFrameChanged));
      InProcess = false;
      cmdGo.Enabled = true;
      cmdStop.Enabled = false;
    }
  }
}
           
       
Animate-c.zip( 6 k)