Home

GDI+ Example Application:
Rotating Circles

 

Introduction

One of the interesting things about drawing graphics is that they can be entertaining. For example, in this application, we draw a circle in the middle of the form. Then we create a series of circles that rotate around the center. To make this an animation, we user a timer control.

 

Practical LearningPractical Learning: Drawing a Circle

  1. Start a new Windows Application named RotatingCircles1
  2. Double-click middle of the form and change the file as follows:
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace RotatingCircles1
    {
        public partial class Form1 : Form
        {
            Graphics graphDrawingArea;
            Bitmap bmpDrawingArea;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                bmpDrawingArea = new Bitmap(Width, Height);
                graphDrawingArea = Graphics.FromImage(bmpDrawingArea);
            }
        }
    }
  3. From the Components section of the Toolbox, click Timer and click the form
  4. In the Properties window, change the following values:
    Enabled: True
    Interval: 20
  5. Under the form, double-click the timer1 object and make the following changes:
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace RotatingCircles1
    {
        public partial class Form1 : Form
        {
            Graphics graphDrawingArea;
            Bitmap bmpDrawingArea;
            static int mainRadius = 10;
            static int smallRadius = 5;
            static bool isMax;
            static bool smallRadiusMax;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                bmpDrawingArea = new Bitmap(Width, Height);
                graphDrawingArea = Graphics.FromImage(bmpDrawingArea);
            }
    
            void DrawCentralCircle(int CenterX, int CenterY, int Radius)
            {
                int start = CenterX - Radius;
                int end = CenterY - Radius;
                int diam = Radius * 2;
    
                graphDrawingArea.DrawEllipse(new Pen(Color.Blue),
                              start, end, diam, diam);
            }
    
            void DrawCornerCircle(int CenterX, int CenterY, int Radius)
            {
                int start = CenterX - Radius;
                int end = CenterY - Radius;
                int diam = Radius * 2;
    
                graphDrawingArea.DrawEllipse(new Pen(Color.Red),
                              start, end, diam, diam);
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                Graphics graph = Graphics.FromHwnd(this.Handle);
    
                int centerX = ClientRectangle.Width / 2;
                int centerY = ClientRectangle.Height / 2;
    
                if (isMax == true)
                    mainRadius--;
                else
                    mainRadius++;
    
                if (mainRadius > (ClientRectangle.Height / 2))
                    isMax = true;
                if (mainRadius < 10)
                    isMax = false;
    
                if (smallRadiusMax == true)
                    smallRadius--;
                else
                    smallRadius++;
    
                if (smallRadius > 240)
                    smallRadiusMax = true;
                if (smallRadius < 5)
                    smallRadiusMax = false;
    
                graphDrawingArea.FillRectangle(Brushes.Black, 0, 0, 
    					   Width, Height);
    
                // Central
                DrawCentralCircle(centerX, centerY, mainRadius);
                // Top-Left
                DrawCornerCircle(centerX / 2, centerY / 2, smallRadius);
                // Top-Right
                DrawCornerCircle(centerX + (centerX / 2), 
    			     centerY / 2, smallRadius);
                // Bottom-Left
                DrawCornerCircle(centerX / 2, centerY + (centerY / 2), 
    			     smallRadius);
                // BottomRight
                DrawCornerCircle(centerX + (centerX / 2),
                         centerY + (centerY / 2), smallRadius);
    
                graph.DrawImage(bmpDrawingArea, 0, 0);
            }
        }
    }
  6. Execute the application to see the result
     
    Rotating Circles
  7. Close the form
 
 

Home Copyright 2008-2009, yevol.com