Обобщённое программирование в C#. Анимация объектов в диалоговых Windows-приложения. Способы создания

Автор работы: Пользователь скрыл имя, 18 Марта 2012 в 18:27, курсовая работа

Описание

Приложения с графикой, игры, Computer Aided Design/Computer Aided Manufacture (CAD/CAM — проектирование/производство с помощью компьютера), программы для рисования, для создания графиков и многие другие типы приложений требуют от разработчиков написания кода для работы с графикой. Использование создаваемых пользователем управляющих элементов также предполагает работу с графикой.

Содержание

Введение……………………………………………………………………….3

Глава1. Принципы работы с графикой средствами GDI+

1.1 Пространство имён GDI+ …………………………………...…4
1.2 Пространство имен System.Drawing ………………………......5
1.3 Служебные типы System.Drawing …………………………......6
1.4 Возможности класса Graphics ……………………………….....7
1.5 Обзор пространства имен System. Drawing. Drawing2D …..9
1.6. Вывод изображений …………………………………………..10

Глава 2. Способы создания анимации объектов

2.1 Метод перемещения …………………………………11
2.2 Таймер ...……………………………………………...13


Глава3. Практическая работа «Часики» ………………………..14

Заключение …………………………………………………27

Литература ………………………………………………….28

Работа состоит из  1 файл

курсовая.doc

— 234.50 Кб (Скачать документ)

                        fi = fiM = -90; fiH = -90;

                        //----Конец

                        hour = (int)numericUpDown1.Value%12;

                        fiH = fiH + 30 * hour;

                        //Изменение координат

    float cosFiH = (float)Math.Cos(((Math.PI * fiH) / 180));

   float sinFiH = (float)Math.Sin(((Math.PI * fiH) / 180));

                        //секунды

                        x2H = nowradX + r * cosFiH;

                        y2H = nowradY + r * sinFiH;

                        //-----установка Часов

                        minute = (int)numericUpDown2.Value;

                        fiM = fiM + 6 * minute;

                        //Изменение координат

   float cosFiM = (float)Math.Cos(((Math.PI * fiM) / 180));

   float sinFiM = (float)Math.Sin(((Math.PI * fiM) / 180));

                        //секунды

                        x2M = nowradX + r * cosFiM;

                        y2M = nowradY + r * sinFiM;

                        //установка минут

 

                        second = (int)numericUpDown3.Value;

                        fi = fi + 6 * second;

                        //Изменение координат

     float cosFi = (float)Math.Cos(((Math.PI * fi) / 180));

     float sinFi = (float)Math.Sin(((Math.PI * fi) / 180));

                        //секунды

                        x2S = nowradX + r * cosFi;

                        y2S = nowradY + r * sinFi;

                        //установка Секунд

                        startindx = false;

                        button2.Enabled = true;

                    }

                    numericUpDown1.Enabled = false;

                    numericUpDown2.Enabled = false;

                    numericUpDown3.Enabled = false;

                    button1.Text = "Пауза";

                    timer3.Enabled = true;

                    timer2.Enabled = true;

                    button5.Enabled = false;

                }//if(timer3)

                else //таймер работает но останавливаем

                {

                    timer3.Enabled = false;

                    timer2.Enabled = false;

                    button1.Text = "Продолжить";

                    button5.Enabled = false;

                }//else about if(timer1)

            }

 

        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)

        { e.Graphics.DrawLine(myPenSec, nowradX, nowradY, x2S, y2S);//прорисовка секундной стрелки

            e.Graphics.DrawLine(myPenMin, nowradX, nowradY, x2M, y2M);//прорисовка минутной стрелки

            e.Graphics.DrawLine(myPenHou, nowradX, nowradY, x2H, y2H);//прорисовка часовой

        }

 

        //--------------------

        //-Timer3

        private void timer3_Tick(object sender, EventArgs e)

        {

 

            if (pm_am == true && AlarmSec != -1)

            {

                if ((hour + 12) == AlarmHour && minute == AlarmMin && second == AlarmSec)

                {

                    AlarmSec = -1;

                    MessageBox.Show("Пора вставать", "Будильник", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }

            }

            else if (pm_am == false && AlarmSec != -1)

            {

                if (hour == AlarmHour && minute == AlarmMin && second == AlarmSec)

                {

                    AlarmSec = -1;

                    MessageBox.Show("Пора вставать", "Будильник", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }

            }//конец работы будильника

            //будильник в установках пользователя

            fi += 6;//изменение поворота угла

            //Изменение координат

    float cosFi = (float)Math.Cos(((Math.PI * fi) / 180));

     float sinFi = (float)Math.Sin(((Math.PI * fi) / 180));

            //секунды

            x2S = nowradX + r * cosFi;

            y2S = nowradY + r * sinFi;

            if (second < 59)

                second++;

            else { second = 0; indXM = 1; }

 

                        //Минуты

            if (indXM == 1)

            {

                fiM += 6;

                //Изменение координат

  float cosFiM = (float)Math.Cos(((Math.PI * fiM) / 180));

   float sinFiM = (float)Math.Sin(((Math.PI * fiM) / 180));

                //секунды

                x2M = nowradX + r * cosFiM;

                y2M = nowradY + r * sinFiM;

                if (minute < 59)

                    minute++;

                else { minute = 59; indXH = 1; };

                indXM = 0;

            }//if

 

            if (indXH == 1)

            {

                fiH += 30;

                //Изменение координат

   float cosFiH = (float)Math.Cos(((Math.PI * fiH) / 180));

   float sinFiH = (float)Math.Sin(((Math.PI * fiH) / 180));

                //секунды

                x2H = nowradX + r * cosFiH;

                y2H = nowradY + r * sinFiH;

                if (hour < 12)

                    hour++;

                else  //Таймер закончил отсчет

                {

                    //timer1.Enabled = false;  //стоп таймер

                    hour = minute = second = 0; //равняем нулю переменные времени

        x2S = x2M = x2H = nowradX; //координаты дополнений

                    y2S = 15; y2M = 13; y2H = 10;

                    fi = fiM = -90; fiH = -90;

                }//else

                indXH = 0;

            }//if

            //------Время Электронное

            textBox1.Text = hour.ToString();

            textBox2.Text = minute.ToString();

            textBox3.Text = second.ToString();

            //-----------------------

            pictureBox1.Refresh();

        }//timer3

        //-------

        private void button2_Click(object sender, EventArgs e)

        { hour = minute = second = 0; //равняем нулю переменные времени

            x2S = x2M = x2H = nowradX; //координаты дополнений

            y2S = 15; y2M = 13; y2H = 10;

            fi = fiM = -90; fiH = -90;

            startindx = true; //

            numericUpDown1.Enabled = true;

            numericUpDown2.Enabled = true;

            numericUpDown3.Enabled = true;

            button1.Text = "Пуск";

            button2.Enabled = false;

            timer2.Enabled = false;

            timer3.Enabled = false;

            modePeTime = false;

            modeRTime = true;

            label5.Visible = true;

            label5.Text = "Не установлен";

            timer4.Enabled = false;

            button5.Enabled = true;

        }//кнопка стоп

 

        private void timer2_Tick(object sender, EventArgs e)

        {

            if (to_the_left == true)//поворот влево

            {

                angle += 6;

                if (angle >= max_angle)

                {

                    to_the_left = false;

                }

            }

            else

            {

                angle -= 6;

                if (angle <= max_angle2)

                {

                    to_the_left = true;

                }

            }

            Bitmap bitmap = new Bitmap("d:\\UG.png");

 

            pictureBox2.Image = RotateImage((Image)bitmap, angle);

        }     

       

        private void button3_Click(object sender, EventArgs e) //пользовательские настройки

        {

            button1.Enabled = true;

            button3.Enabled = false;

            modePeTime = true; //

            label5.Visible = true;

            label5.Text = "Настройка пользователя";

            //Будильник

            button6.Enabled = true;//возможность работы с будильником

            //включение полос установки времени

            numericUpDown4.Enabled = true;

            numericUpDown5.Enabled = true;

            numericUpDown6.Enabled = true;

        }

 

        private void timer4_Tick(object sender, EventArgs e) //текущее время

        {

            //будильник

            if (pm_am == true && AlarmSec != -1)

            {

                if ((hour + 12) == AlarmHour && minute == AlarmMin && second == AlarmSec)

                {

                    AlarmSec = -1;

                    MessageBox.Show("Пора вставать", "Будильник", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }

            }

            else if (pm_am == false && AlarmSec != -1)

            {

                if (hour == AlarmHour && minute == AlarmMin && second == AlarmSec)

                {

                    AlarmSec = -1;

                    MessageBox.Show("Пора вставать", "Будильник", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }

            }//конец работы будильника

            //---------

           

            fi += 6;

            //Изменение координат

  float cosFi = (float)Math.Cos(((Math.PI * fi) / 180));

float sinFi = (float)Math.Sin(((Math.PI * fi) / 180));

            //секунды

            x2S = nowradX + r * cosFi;

            y2S = nowradY + r * sinFi;

            if (second < 59)

                second++;

            else { second = 0; indXM = 1; }

 

                        //Минуты

            if (indXM == 1)

            {

                fiM += 6;

                //Изменение координат

   float cosFiM = (float)Math.Cos(((Math.PI * fiM) / 180));

   float sinFiM = (float)Math.Sin(((Math.PI * fiM) / 180));

                //секунды

                x2M = nowradX + r * cosFiM;

                y2M = nowradY + r * sinFiM;

                if (minute < 59)

                    minute++;

                else { minute = 59; indXH = 1; };

                indXM = 0;

            }//if

 

            if (indXH == 1)

            {

                fiH += 30;

                //Изменение координат

  float cosFiH = (float)Math.Cos(((Math.PI * fiH) / 180));

  float sinFiH = (float)Math.Sin(((Math.PI * fiH) / 180));

                //секунды

                x2H = nowradX + r * cosFiH;

                y2H = nowradY + r * sinFiH;

                if (hour < 12)

                    hour++;

                else  //переход по кругу через 12 часов

                {

                    hour = minute = second = 0; //равняем нулю переменные времени

                    x2S = x2M = x2H = nowradX; //координаты дополнений

                    y2S = 15; y2M = 13; y2H = 10;

                    fi = fiM = -90; fiH = -90;

                }//else

                indXH = 0;

            }//if

            //------Время Электронное

            textBox1.Text = hour.ToString();

            textBox2.Text = minute.ToString();

            textBox3.Text = second.ToString();

            //-----------------------

            pictureBox1.Refresh();

        }

 

        private void button5_Click(object sender, EventArgs e)

        {

            label5.Text = "Время Windows"; //объявление режима

            if (timer3.Enabled)

            {

                timer3.Enabled = false;//выключ. пользоват. режим

                button1.Enabled = false;

                button2.Enabled = false;

                numericUpDown1.Enabled = true;

                numericUpDown2.Enabled = true;

                numericUpDown3.Enabled = true;

                button1.Text = "Пуск"; //переназываем кнопку старт

            }//если режимы таймер или пользовательское время включ.

                        fi = fiM = -90; fiH = -90;//углы поворота при включении

                        //установка часов

                        hour = (int)DateTime.Now.TimeOfDay.Hours;

                        if (hour > 12) pm_am = true; // переход часов на am

                        else pm_am = false; //переход на pm

                        hour = hour % 12;//подгонка под циферблат

                        fiH = fiH + 30 * hour;

                        //Изменение координат

float cosFiH = (float)Math.Cos(((Math.PI * fiH) / 180));

float sinFiH = (float)Math.Sin(((Math.PI * fiH) / 180));

                        //секунды

                        x2H = nowradX + r * cosFiH;

                        y2H = nowradY + r * sinFiH;

                        //-----установка Часов

        minute = (int)DateTime.Now.TimeOfDay.Minutes;

                        fiM = fiM + 6 * minute;

                        //Изменение координат

  float cosFiM = (float)Math.Cos(((Math.PI * fiM) / 180));

  float sinFiM = (float)Math.Sin(((Math.PI * fiM) / 180));

                        //секунды

                        x2M = nowradX + r * cosFiM;

                        y2M = nowradY + r * sinFiM;

                        //установка минут

 

    second = (int)DateTime.Now.TimeOfDay.Seconds;

                        fi = fi + 6 * second;

                        //Изменение координат

   float cosFi = (float)Math.Cos(((Math.PI * fi) / 180));

   float sinFi = (float)Math.Sin(((Math.PI * fi) / 180));

                        //секунды

                        x2S = nowradX + r * cosFi;

                        y2S = nowradY + r * sinFi;

                        timer4.Enabled = true;

                        timer2.Enabled = true;

                     //Блок будильника

  button6.Enabled = true;//возможность работы с будильником

                        //включение полос установки времени

                        numericUpDown4.Enabled = true;

                        numericUpDown5.Enabled = true;

                        numericUpDown6.Enabled = true;

        }//Время Windows

        private void button6_Click(object sender, EventArgs e)//Установка будильника

        {

            AlarmHour = (int)numericUpDown4.Value;//Установка часы таймера (элемент NumericUPDOWN)

            AlarmMin = (int)numericUpDown5.Value;//Установка минут таймера (элемент NumericUPDOWN)

            AlarmSec = (int)numericUpDown6.Value;//Установка секунд таймера (элемент NumericUPDOWN)

            MessageBox.Show("Будильник установлен");//Вывод сообщения на экран

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

 

        }

    }

}

 

26

 



 

Заключение

Приложения с графикой, игры, Computer Aided Design/Computer Aided Manufacture (CAD/CAM — проектирование/производство с помощью компьютера), программы для рисования, для создания графиков и многие другие типы приложений требуют от разработчиков написания кода для работы с графикой. Использование создаваемых пользователем управляющих элементов также предполагает работу с графикой. Посредством своей последней библиотеки классов компания Microsoft сделала написание кода для работы с графикой как никогда простым. Для рисования объектов в Windows Forms приложениях язык С# содержит очень богатый набор методов. Пространство имен Drawing содержит множество объектов, которые облегчают программисту работус графикой. Специально для .NET платформы разработчики Microsoft разработали GDI+ библиотеку, значительно повысив возможности GDI (Graphic Device Interface). GDI+ включает возможности рисования простейших объектов (линии, эллипсы...), рисование различных объектов 2D графики, отображение файлов различных графических форматов (bmp, jpeg, gif, wmf, ico, tiff...) и многое другое.

При написании графического кода следует всегда помнить, что Microsoft Windows не запоминает, каким образом выглядит данное графическое окно, если оно заслоняется другими окнами. Если закрытое ранее окно оказывается на переднем плане и становится видимым, то система Windows сообщает приложению, что окно (или некоторая его часть) становится видимым и его можно нарисовать. На приложение возлагается только задача рисования содержимого окна. Вывод границ окна, линейки с заголовком и прочих графических составляющих самого окна система Windows берет на себя. При создании окна, в котором мы собираемся что-либо нарисовать, следует либо объявить класс, который является производным от System.windows.Forms.Form, либо, если мы создаем собственный управляющий элемент, объявить класс, который является производным от System.windows.Form.userControl. В обоих случаях придется переопределять виртуальную функцию onPaint (). В Windows будет происходить обращение к этой функции всякий раз, когда возникает необходимость повторного рисования любой части окна. При наступлении этого события класс PaintEventArgs передается в качестве аргумента.

Информация о работе Обобщённое программирование в C#. Анимация объектов в диалоговых Windows-приложения. Способы создания