/*
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)