Анимация объектов в диалоговых Windows-приложениях, способы создания

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    108,83 Кб
  • Опубликовано:
    2016-03-03
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Анимация объектов в диалоговых Windows-приложениях, способы создания














Анимация объектов в диалоговых Windows-приложениях, способы создания

Введение

графика программный служебный приложение

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

Посредством последней библиотеки классов компания Microsoft сделала написание кода для работы с графикой как никогда простым. Для рисования объектов в Windows Forms - приложениях язык С# содержит богатый набор типов и методов. Специально для.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 передается в качестве аргумента.

Целью курсовой работы - является изучения вывода на форму графики (изображения и текста), способов создания анимации графических объектов.

Объектом исследования является процесс создания анимации графический объектов.

Предметом исследования является использование анимации графических объектов в современных приложениях различного типа.

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

.1 Пространство имён GDI+

расшифровывается как Graphic Device Interface (интерфейс графических устройств). Этим словом обозначается подсистема Windows, предназначенная для вывода графических изображений на экран и на принтер (ОС Windows вся основана на использовании графики). GDI+ - это новый набор программных интерфейсов, используемый в.NET.

В.NET предусмотрено множество пространств имен, предназначенных для вывода двумерных графических изображений. Помимо ожидаемых стандартных типов (например, для работы с цветом, со шрифтами, с пером и кистью, с изображениями) в этих пространствах имён предусмотрены типы для выполнения достаточно изощренных операций, таких как геометрические преобразования, сглаживание неровностей, подготовка палитры, поддержка вывода на принтер и многие другие. Перечень наиболее важных пространств имен для работы с графическими изображениями представлен в табл. 1.1.1

Таблица 1.1.1. Наиболее важные пространства имен GDI+

Пространство имен

Специализация

System. Drawing

Важнейшее пространство имен GDI+, которое содержит основные типы для вывода графики (для работы со шрифтами, перьями, кистью и т.п.), а также исключительно важный тип Graphics

System, Drawing, Drawing2D

В этом пространстве имен предусмотрены типы для выполнения более сложных операций с двумерной графикой (градиентная заливка, геометрические преобразования и т.п.)

System. Drawing. Imaging

Здесь определены типы, которые позволяют напрямую работать с графическими изображениями (менять палитру, извлекать метаданные изображений, выполнять операции с метафайлами и т.п.)

System. Drawing. Text

Это пространство имен позволяет работать с системными шрифтами. Например, тип FontColiection позволяет получать список всех установленных в системе и шрифтов.


Чтобы обеспечить возможность работы с графикой в приложении, необходимо добавить в него ссылку на сборку System. Drawing.dll. После этого нам необходимо добавить в список используемых пространств имен строку using System. Drawing; и можно приступать к работе с графикой. Если приложение имеет шаблон Windows Application, то эта ссылка будет добавлена автоматически.

.2 Пространство имен System. Drawing

Подавляющее большинство типов для работы с графикой, находятся в пространстве имен System. Drawing. Некоторые наиболее важные типы этого пространства имён представлены в табл. 1.2.1

Таблица 1.2.1. Типы пространства имен System. Drawing

Тип

Назначение

Bitmap

Инкапсулирует файл изображения и определяет набор методов для выполнения различных операций с этим изображением

Brush Brushes SolidBrush SystemBrushes TextureBrush

Объекты Brush (кисть) используются для заполнения пространства внутри геометрических фигур (например, прямоугольников, эллипсов или многоугольников). Тип Brush - это абстрактный базовый класс, остальные типы являются производными от Brush и определяют разные наборы возможностей. Дополнительные типы Brush определены в пространстве имен System. Drawing. Drawing2D

Graphics

Этот важнейший класс определяет набор методов для вывода текста, изображений и геометрических фигур. Можно считать этот тип эквивалентом типа НОС в Win32

Image ImageAnimator

Imagе - это абстрактный базовый класс, который обеспечивает возможности типов Bitmap, Icon и Cursor. ImageAnimator позволяет производить показ изображений (типов, производных от Image) через указанные вами интервалы времени

Pen Pens SystemPens

Pen (перо) - это класс, при помощи которого можно рисовать прямые и кривые линии. В классе Реn определен набор статических свойств, при помощи которых можно получить объект Реn с заданными свойствами (например, с установленным цветом)

Point PointF

Эти структуры обеспечивают работу с координатами точки. Point работает со значениями типа int, a PointF - со значениями типа float

Region

Определяет область, занятую геометрической фигурой


1.3 Служебные типы System. Drawing

Многие методы, определенные в классе Graphic, требуют указания положение или область для вывода графического объекта. Например, при использовании метода DrawString() необходимо указать местонахождение выводимой текстовой строки на элементе управления. Метод DrawString() многократно перегружен, но один из наиболее часто используемых вариантов требует указания координат (х, у) или прямоугольной области для вывода. Другим часто используемым методам необходимо передавать размеры (высоту и ширину) прямоугольной области, в которую будет производиться вывод, или, если область вывода будет не прямоугольной, задать эту область другим способом.

Для передачи методам подобной информации в пространстве имен System. Drawing предусмотрены типы Point, Rectangle, Region и Size. Point используется для передачи координат (х, у). Rectangle определяет координаты двух точек, которые будут восприняты как верхний левый и нижний правый углы прямоугольника. Тип Size определяет размер прямоугольной области в каком-либо измерении (то есть используется для указания высоты или ширины). Тип Region необходим для работы с непрямоугольными областями.

Внутренние переменные, используемые для хранения данных в Point, Rectangle и Size, являются целочисленными (то есть относятся к типу int). Если возникла необходимость указывать координаты или размеры при помощи значений с плавающей запятой (тип float), то в нашем распоряжении типы PointF, RectangleF и SizeF. Они отличаются лишь форматом внутренних переменных (fIoat вместо int). Наборы членов у них одинаковы.

Тип Point(F)

Первый служебный тип System. Drawing. Point (F). Наиболее важные члены этого класса представлены в табл. 1.3.1

Несмотря на то, что этот тип чаще всего используется в приложениях GDI+ с графическим пользовательским интерфейсом, его вполне можно использовать в приложениях любого типа.

Таблица 1.3.1. Члены типа Point (PointF)

Член

Назначение

+ - = !=

Перегруженные операторы для выполнения различных действий с координатами х и у

Х y

Эти свойства позволяют получать и устанавливать значения координат х и у

IsEmpty

Это свойство возвращает true, если значения х и у равны нулю

Offset()

Этот метод позволяет произвести смещение точки относительно исходной позиции

Тип Size(F)

Типы Size и SIzeF простые в применении и практически не требуют комментариев. Эти структуры обеспечивают работу с размерами. Краткий перечень членов этих типов представлен в табл. 1.3.2

Таблица 1.3.2. Члены типов Size и SizeF

Член

Назначение

+ - = !=

Перегруженные операторы

Height Width

.4 Возможности класса Graphics

Все возможности вывода изображений в GDI+ представлены именно в этом классе. Можно считать этот класс неким виртуальным устройством, на которое производится вывод графики. В Graphics определено очень большое количество методов для вывода текста, изображений, геометрических фигур и т.п. Наиболее часто используемые методы этого класса представлены в табл. 1.4.1

Таблица 1.4.1. Некоторые методы класса Graphics

МетодНазначение

FromHdc() FromHwnd() Fromlmage()

Эти статические методы обеспечивают возможность получения объекта Graphics из элемента управления или изображения

Clear()

Заполняет объект Graphics выбранным пользователем цветом, удаляя его предыдущее содержимое

DrawArc() DrawBezler() DrawBeziers() DrawCurve() DrawEllipse() DrawIcon() DrawLine() DrawString()

Эти методы (как и многие другие) предназначены для вывода изображений и геометрических фигур

FillElllpse() FillPath() FillPie() FillPolygon() FillRectangle()

Эти методы предназначены для заполнения внутренних областей графических объектов


В классе Graphics также определен набор свойств, при помощи которых можно настраивать параметры графических объектов. Наиболее важные свойства представлены в табл. 1.4.2

Таблица 1.4.2. Свойства класса Graphics

Свойство

Назначение

Clip Graphics ClipBounds VisibleClipBounds IsClipEmpty IsVisibleClipEmpty

Эти свойства позволяют настроить параметры отсечения для объекта

Transform

Для проведения преобразований координат

PageUnit PageScale DpiX DpiY

Эти свойства позволяют задать «место происхождения» операции вывода графического объекта и единиц измерения

SmoothingMode PixelOffsetMode TextRenderingHint

Позволяют задать плавность переходов для геометрических объектов и текста. Устанавливаются при помощи значений из соответствующих перечислений, определенных в пространствах имен System. Drawing и System. Drawing2D

Compositing Mode CompositingQuality

Свойство Com positing Mode определяет, будет ли выводимый графический объект выводиться над фоном или будет происходить смешение с фоном. Используются значения из перечисления CompositingMode, определенном в пространстве имен System. Drawing2D. CompositingQuality определяет параметры процесса смешивания. Для него используются значения из перечисления CompositingQuality, также определенном в пространстве имен System. Drawing2D

InterpolationMode

Определяет интерполяцию между конечными точками. Используются значения из соответствующего перечисления

.5 Обзор пространства имен System. Drawing. Drawing2D

Самые простые варианты типов Реn (перо) и Brush (кисть) определены в пространстве имен System. Drawing. Однако есть гораздо более интересные перья и кисти, которые представлены в пространстве имен System. Огаing. Drawlng2D.

Это дополнительное пространство имен GDI+ (со значительно меньшим количеством типов, чем System. Drawing) обеспечивает возможность устанавливать специальные «наконечники» для перьев (pen caps), создавать кисти, которые рисуют не сплошной полосой, а текстурами, производить различные векторные манипуляции с графическими объектами. Некоторые наиболее интересные типы этого пространства имен представлены в табл. 1.5.1

Таблица 1.5.1. Классы System. Drawing. Drawing2D

Класс

Назначение

AdjustableArrowCap CustomLJneCap

Определяют «наконечники» для перьев. В результате исходная точка и конец линии получают характерные завершения. Можно использовать выбранный пользователем вариант: или стрелки на конце линии (AdjustableArrowCap), или полностью определенное им самим завершение (Custom LineCap)

Blend ColorBlend

Используются для смешивания цветов. Обычно используются вместе с LinearGradientBrush

GraphicsPath GraphicsPath Iterator

Объект GraphicsPath представляет набор связанных линий (прямых и кривых). В данный объект можно поместить практически любой тип геометрической фигуры (например, дуги, прямоугольники, отрезки прямой линии, многоугольники и т.п.)

PathData

Хранит графические данные для GraphicsPath

HatchBrush LinearGradientBrush PathGradientBrush

Экзотические типы кистей


Для этих типов используются значения из перечислений, также определенных в пространстве имен System. Drawl rig. Drawi ng2D. Эти перечисления представлены в табл. 1.5.2

Таблица 1.5.2. Перечисления System. Drawing. Drawing2D

Перечисление

Назначение

DashStyle

Определяет стиль штриховых линий для пера

FillMode

Определяет заполнение внутренней области геометрической фигуры

HatchStyle

Определяет варианты штриховки (для объектов HatchBrush)

LinearGradientMode

Определяет направление градиентного изменения цвета

LineCap

Определяет стиль «наконечника» пера

PenAlignment

Определяет ориентацию пера относительно проводимой им линии

РепТуре

Определяет тип линии, создаваемой пером

QualityMode SmoothingMode

Определяют качество вывода графического объекта


1.6 Вывод изображений

Для вывода изображения на форму есть два способа. Первый заключается в описании необходимой логики в метод OnPaint(). Второй предусматривает перехват события Paint.

Вне зависимости от того, какой метод используется, механизм вывода графики будет одним и тем же. Как только приложение станет «грязным», в очереди сообщений для этого приложения появится специальное сообщение, инициирующее сеанс вывода графики (перерисовки). Приложение становится «грязным» тогда, когда изменяются его размеры, когда его окно полностью или частично перекрывается окном другого приложения, когда оно восстанавливается из минимизированного состояния. В результате либо вызывается метод OnPaint(), либо срабатывает наш обработчик события Paint.

Иногда возникает необходимость инициировать перерисовку изображения на форме вручную (иными словами, программным образом поместить в очередь сообщений сообщение о необходимости перерисовки). Например, в программе может быть предусмотрено диалоговое окно для выбора пользователем изображения. После того как пользователь выберет то, что ему нужно, форму необходимо будет перерисовать, чтобы отобразить выбранное изображение.

Для того чтобы инициировать перерисовку формы программным образом, используется метод Invalidate().

Существует множество перегруженных вариантов метода Invaldate(). Например, указать конкретную прямоугольную область, подлежащую перерисовке, вместо всей клиентской части формы (она перерисовывается по умолчанию).

При любой перерисовке формы (возникновении события Paint) все кружки, выведенные на форме после щелчков мышью, исчезнут. Так как, вывод графических объектов (кружков) в нашем случае происходит только в результате щелчка мышью, но не при выводе формы на экран.

Однако в приложении потребуется не только выводить какие-либо графические объекты на форму, но и сохранять их при перерисовке формы, что бы они не пропали необходимо позаботиться о том, чтобы информация о графических объектах каким-то образом сохранялась и использовалась при перерисовке формы. Самый простой способ - создать внутреннюю коллекцию (например, при помощи класса ArrayList) и помещать туда нужные нам объекты. Затем к этой коллекции будет обращаться метод OnPaint().

Таким образом, использование метода Graphics. FromHwnd() - это один из способов получить объект Graphics без использования события Paint.

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

.1 Методы перемещения

Для перемещения картинки(Image) по форме можно воспользоваться тремя методами.

Первый метод заключается в том, что свойства Left и Top картинки изменяются на разницу между начальными и конечными координатами (нажатия и отпускания мыши соответственно). Этот способ самый простой и надежный, но у него есть один недостаток: left и top изменяются по очереди, что приводит к заметному мерцанию картинки. Необходимо положить на форму Image и вставить в нее какую-нибудь картинку. Для начала объявляем глобальные переменные (они объявляются в разделе Implementation) x0, y0:integer - они будут запоминать начальные координаты. Так же будет использоваться переменная move типа boolean,

Второй метод: у некоторых компонентов, в том числе и Image, есть такая процедура SetBounds (Left, Top, Width, Height), которая может изменять сразу все четыре параметра. Таким образом, событие OnMouseMove можно изменить так:

procedure TForm1. Image1MouseMove (Sender: TObject; Shift: TShiftState; X,: Integer);move then begin

image1. SetBounds (image1. Left+x-x0, image1. Top+y-y0, image1.width, image1.height);

end;;

Также по экрану можно перемещать не саму картинку, а только ее рамку, когда пользователь выберет место для картинки и отпустит кнопку - она туда переместиться. Для этого понадобится еще одна глобальная переменная: rec: TRect, которая будет хранить параметры картинки. Теперь слегка изменим обработчики событий для картинки. Таким образом, все в целом будет выглядеть так:

procedure TForm1. Image1MouseDown (Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);button<>mbLeft then move:=falsebegin:=true;:=x;

y0:=y;:=image1. BoundsRect; // запоминаем контур картинки

end;;TForm1. Image1MouseMove (Sender: TObject; Shift: TShiftState; X,

Y: Integer);

beginmove then begin. Canvas. DrawFocusRect(rec); // рисуем рамкуrec do begin:=Left+x-x0;:=Top+y-y0;:=right+x-x0;:=bottom+y-y0;:=x;

y0:=y; // изменяем координаты;. Canvas. DrawFocusRect(rec); // рисуем рамку на новом месте

end;;TForm1. Image1MouseUp (Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);. Canvas. DrawFocusRect(rec);image1 do begin(rec.left+x-x0, rec.top+y-y0, width, height); // перемещаем картинку

move:=false;;;

Поскольку DrawFocusRect рисует рамку методом Xor, то при повторном вызове этой функции с теми же параметрами, рамка стирается.

Третий метод: свойство Control. Location получает или задает координаты левого верхнего угла элемента управления относительно левого верхнего угла контейнера. Поскольку класс Point является типом значения (Structure в Visual Basic, struct в Visual C#), он возвращается в виде значения, т.е. при доступе к свойству возвращается копия точки левого верхнего угла элемента управления. Поэтому корректировка свойства X или Y объекта Point, возвращенного данным свойством, не повлияет на значения свойств Left, Right, Top и Bottom элемента управления. Чтобы скорректировать эти свойства, задайте каждое значение свойства отдельно или задайте свойство Location с новым объектом Point. Если объект Control является объектом Form, значение свойства Location представляет левый верхний угол Form в экранных координатах.

В следующем примере кода создается объект GroupBox и задаются некоторые его общие свойства. В примере создается объект TextBox и задается его свойство Location, определяющее расположение внутри группы. Затем задается свойство Text группы, которая далее закрепляется в верхней части формы. Наконец, группа отключается посредством задания для свойства Enabled значения false, что приводит к отключению всех элементов управления, содержащихся в группе.

private void AddMyGroupBox()

{

// Create a GroupBox and add a TextBox to it.groupBox1 = new GroupBox();textBox1 = new TextBox();. Location = new Point (15, 15);. Controls. Add(textBox1);

// Set the Text and Dock properties of the GroupBox.. Text = «MyGroupBox»;. Dock = DockStyle. Top;

// Disable the GroupBox (which disables all its child controls). Enabled = false;

// Add the Groupbox to the form.

this. Controls. Add(groupBox1);

}

2.2 Использование программного компонента «Таймер»

Таймер - это устройство, периодически уведомляющее приложение о завершении заданного интервала времени. Ваша программа устанавливает этот интервал, как бы говоря: «'Предупреждай меня каждую десятую долю секунды», - и таймер вызывает обработчик события десять раз в секунду.

В пространствах имен System. Timers, System. Threading и SystemWindowsforms определены три разных класса с именем Timer. Таймер, который определен в пространстве SystemWindowsforms, совмещен с другими событиями Windows и наиболее прост в использовании.

Хотя таймер и не столь важное устройство ввода, как клавиатура или мышь, он все же может быть очень полезен и находит применение во многих приложениях Windows Forms. Наиболее очевидным приложением для таймера является программа-часы. Однако есть и другие, возможно, не такие очевидные области применения таймера.

• Многозадачность хотя Windows является средой с вытесняющей многозадачностью, рекомендуется, чтобы после обработки события программы возвращали управление Windows как можно быстрее. Иначе темп может существенно замедлиться. Если программа должна выполнить большой объем работы, ее можно разделить на несколько частей и выполнять каждую часть по получении события таймера.

• Обновление данных Таймер подходит для обновления постоянно изменяющейся информации, например, при выводе данных о свободных ресурсах или проценте выполнения какой-либо задачи.

• Автосохранение Таймер позволяет периодически сохранять на диске результаты работы программы.

• Прекращение работы демо-версий программ. Некоторые демо-версии программ самостоятельно завершаются, скажем, через 30 минут после запуска. В таких приложениях таймер подает сигнал на прекращение работы. (Пример такой программы, CloselnFive)

• Пошаговое продвижение. Обычно необходимо с заданной скоростью перемещать графические объекты в игре или переключать страницы в программах-описаниях. Таймер помогает избежать несовместимости, связанной с разными скоростями процессоров. Таймер часто применяют в анимации.

Таймер можно рассматривать и как гарант, обеспечивающий передачу управления программе. Если после выполнения конструктора или обработчика события программа отдает управление, обычно нельзя определить, когда произойдет следующее событие. Оно в таймере более определенно, так как таймер не обладает ритмичностью метронома. События, вырабатываемые классом Timer, синхронизированы с другими событиями.

Иначе говоря, событие таймера никогда не прервет процедуру обработки другого события, выполняющуюся в том же потоке. Если обработка события идет слишком долго, она задержит событие таймера.

Класс Timer. Класс Timer невелик и относительно прост. Обычно объект Timer создается конструктором по умолчанию: Timer timer = new Timer(); Основные свойства класса представлены в табл. 2.2.1

Таблица 2.2.1. Основные свойства класса Timer

CanRaiseEvents

Возвращает значение, показывающее, может ли компонент вызывать событие

DesignMode

Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время

Enabled

Возвращает или задает, запущен ли таймер

Events

Возвращает список обработчиков событий, которые прикреплены к этому объекту Component

Interval

Возвращает или задает время в миллисекундах перед Tick событие возникает по отношению к последнему вхождению Tick событие



Основные методы представлены в табл. 2.2.2

Таблица 2.2.2. Основные методы класс Timer

CreateObjRef

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом

Dispose()

Освобождает все ресурсы, используемые объектом Component

Finalize

Освобождает неуправляемые ресурсы и выполняет другие операции очистки, перед тем как объект Component будет удален при сборке мусора

OnTick

Вызывает Tick событие

Start

Запускает таймер

Stop

Останавливает таймер

ToString

Инфраструктура. Возвращает строку, представляющую Timer


Работа с графикой весьма трудоёмкий и при этом интересный процесс. Средствами GDI+ этот процесс максимально упрощается и облегчается. Визуализация графических данных средствами GDI+ позволяет расширять функциональные возможности Windows Forms, а именно улучшить дизайн интерфейсов как Web, так и Windows-приложений.

В результате выполнения данной курсовой работы:

-произведён обзор пространства имён GDI+, System. Drawing,

System. Drawing. Drawing2D;

-изучены типы и классы пространства имён System. Drawing;

-приобретены практические умения создания анимации графических

объектов;

-разработано демонстрационное графическое Windows-приложение

«Созвездие», которое может быть использовано в астрономии, при

изучении созвездий.

Анимацию графический объектов можно представить тремя способами, один из которых был применён в практической части. Кроме того, были рассмотрели многочисленные возможности объекта Graphics и приемы работы с ним.

Цель и задачи курсовой работы были выполнены.

Литература

1. Троелсен, Э. Язык программирования С# 2005 и платформа.NET 2.0 / Э. Троелсен. - 3-е издание. - Москва-Санкт-Петербург-Киев: Издательский дом «Вильямс», 2007. - 1168 с.

. Шилдт, Г. Полный справочник по С# / Г. Шилдт. - Москва: Санкт-Петербург; Киев: Издательский дом «Вильямс», 2006. - 750 с.

3. Прайс, Дж. Visual C#.NET/ Дж. Прайс, М. Гандерлой - Полное руководство. - Киев: ВЕК, Санкт-Петербург: КОРОНА, 2004. - 960 с.

Приложение

Графическое Windows-приложение «Созвездие»

Главное окно приложения (рис. 1):

using System;System. Collections. Generic;System. ComponentModel;System. Data;System. Drawing;System. Linq;System. Text;System. Threading. Tasks;System. Windows. Forms;

звёзды

{partial class Form1: Form

{Form1 ()

{();

}

void button1_Click (object sender, EventArgs e)

{. Hide();Ob = new Form2 ();. ShowDialog();

}void button4_Click (object sender, EventArgs e)

{Rez = MessageBox. Show («Выйти из приложения», «Окно выхода», MessageBoxButtons. YesNo);

{(Rez == DialogResult. Yes). Exit();

}

}

void button2_Click (object sender, EventArgs e)

{. Hide();Ob = new Form3 ();. ShowDialog();

}

void button3_Click (object sender, EventArgs e)

{. Hide();Ob = new Form4 ();. ShowDialog();

}

void button5_Click (object sender, EventArgs e)

{

this. Hide();Ob = new Form5 ();. ShowDialog();

}void Form1_Load (object sender, EventArgs e)

{

}

void button6_Click (object sender, EventArgs e)

{. Hide();Ob = new Form6 ();

Ob. ShowDialog();

}

}

}

Рисунок 1

Фрагмент программного кода для создания анимации созвездия «Дева» (рис. 2):

using System;

using System. Collections. Generic;System. ComponentModel;System. Data;System. Drawing;System. Linq;System. Text;System. Threading. Tasks;System. Windows. Forms;

звёзды

{partial class Form2: Form

{. Drawing. Bitmap poln, poln1, poln2, poln3, poln4, poln5, poln6, poln7;

// Graphics g;

Form2 ()

{();. Paint += pictureBox1_Paint;

}pictureBox1_Paint (object sender, PaintEventArgs e)

{(e);

}void Form2_Load (object sender, EventArgs e)

{

}rand = new Random();timer1 = new Timer();DrawStars (PaintEventArgs e)

{

. Graphics. Clear (Color. Black);

{(int x0 = 10; x0 < e. ClipRectangle. Width; x0 = x0 + 9)

{y0;= rand. Next (0, 524);

double alpha = 0; // поворот

// центр

[] points = new PointF [2 * n + 1];a = alpha, da = Math.PI / n, l;

(int k = 0; k < 2 * n + 1; k++)

{

= k% 2 == 0? r: R;[k] = new PointF((float) (x0 + l * Math. Cos(a)), (float) (y0 + l * Math. Sin(a)));+= da;

}

. Graphics. DrawLines (Pens. Blue, points);. Start();. Interval = 5000;

. Enabled = true;

}

}

}

void pictureBox1_Click (object sender, EventArgs e)

{g = pictureBox1. CreateGraphics();. Clear (Color. Black);

}

void button1_Click (object sender, EventArgs e)

{

. Enabled = false;pero = new Pen (Color. Yellow, 2);f = pictureBox1. CreateGraphics();. DrawLine (pero, 85, 240, 125, 200); // первая линия. DrawLine (pero, 125, 200, 185, 170); // 2. DrawLine (pero, 185, 170, 230, 170); // 3. DrawLine (pero, 230, 170, 280, 160); // 4. DrawLine (pero, 280, 160, 295, 120); // 5. DrawLine (pero, 125, 200, 80, 140);. DrawLine (pero, 185, 170, 160, 130);. DrawLine (pero, 160, 130, 155, 90);mySe = new SolidBrush (Color. Yellow);. DrawEllipse (pero, 82, 238, 7, 7);. FillEllipse (mySe, 82, 238, 7, 7);. DrawEllipse (pero, 123, 197, 5, 5);. FillEllipse (mySe, 123, 197, 5, 5);. DrawEllipse (pero, 80, 140, 5, 5);. FillEllipse (mySe, 80, 140, 5, 5);. DrawEllipse (pero, 159, 130, 5, 5);. FillEllipse (mySe, 159, 130, 5, 5);. DrawEllipse (pero, 154, 90, 6, 6);. FillEllipse (mySe, 154, 90, 6, 6);. DrawEllipse (pero, 183, 167, 5, 5);. FillEllipse (mySe, 183, 167, 5, 5);. DrawEllipse (pero, 230, 167, 5, 5);. FillEllipse (mySe, 230, 167, 5, 5);. DrawEllipse (pero, 279, 157, 5, 5);. FillEllipse (mySe, 279, 157, 5, 5);. DrawEllipse (pero, 293, 120, 5, 5);. FillEllipse (mySe, 293, 120, 5, 5);

}

void button2_Click (object sender, EventArgs e)

{. Hide();Ob = new Form1 ();. ShowDialog();

}void button3_Click (object sender, EventArgs e)

{Rez = MessageBox. Show («Выйти из приложения», «Окно выхода», MessageBoxButtons. YesNo);

{(Rez == DialogResult. Yes). Exit();

}

}

i;void timer3_Tick (object sender, EventArgs e)

{(i == 0)

{= 1;= new Bitmap (new Bitmap (new Bitmap («D:// работы // курсовая // Для Лазовской В // Луна // 1.bmp»), 50, 50));

. MakeTransparent();. Image = (poln);

}(i == 1)

{= 2;= new Bitmap (new Bitmap (new Bitmap («D:// работы // курсовая // Для Лазовской В // Луна // 2.bmp»), 50, 50));. MakeTransparent();. Image = (poln2);

}(i == 2)

{= 3;= new Bitmap (new Bitmap (new Bitmap («D:// работы // курсовая // Для Лазовской В // Луна // 3.bmp»), 50, 50));. MakeTransparent();. Image = (poln3);

}(i == 3)

{= 4;= new Bitmap (new Bitmap (new Bitmap («D:// работы // курсовая // Для Лазовской В // Луна // 4.bmp»), 50, 50));. MakeTransparent();. Image = (poln4);

}(i == 4)

{= 5;

= new Bitmap (new Bitmap (new Bitmap («D:// работы // курсовая // Для Лазовской В // Луна // 5.bmp»), 50, 50));. MakeTransparent();

pictureBox2. Image = (poln1);

}(i == 5)

{= 6;= new Bitmap (new Bitmap (new Bitmap («D:// работы // курсовая // Для Лазовской В // Луна // 6.bmp»), 50, 50));. MakeTransparent();. Image = (poln5);

}(i == 6)

{= 7;

= new Bitmap (new Bitmap (new Bitmap («D:// работы // курсовая // Для Лазовской В // Луна // 7.bmp»), 50, 50));

poln6. MakeTransparent();. Image = (poln6);

}(i == 7)

{= 0;= new Bitmap (new Bitmap (new Bitmap («D:// работы // курсовая // Для Лазовской В // Луна // 8.bmp»), 50, 50));. MakeTransparent();. Image = (poln7);

}

}pero = new Pen (Color. Yellow, 2);pero1 = new Pen (Color. Black, 2);k=0;void timer2_Tick (object sender, EventArgs e)

{f = pictureBox1. CreateGraphics();

(k == 0)

{= 1;= new Pen (Color. White, 4);. DrawLine (pero1, 85, 240, 125, 200); // первая линия. DrawLine (pero1, 125, 200, 185, 170); // 2. DrawLine (pero1, 185, 170, 230, 170); // 3. DrawLine (pero1, 230, 170, 280, 160); // 4. DrawLine (pero1, 280, 160, 295, 120); // 5. DrawLine (pero1, 125, 200, 80, 140);

f. DrawLine (pero1, 185, 170, 160, 130);

f. DrawLine (pero1, 160, 130, 155, 90);mySe1 = new SolidBrush (Color. White);. DrawEllipse (pero, 82, 238, 7, 7);. FillEllipse (mySe1, 82, 238, 7, 7);. DrawEllipse (pero, 123, 197, 5, 5);. FillEllipse (mySe1, 123, 197, 5, 5);. DrawEllipse (pero, 80, 140, 5, 5);. FillEllipse (mySe1, 80, 140, 5, 5);. DrawEllipse (pero, 159, 130, 5, 5);. FillEllipse (mySe1, 159, 130, 5, 5);. DrawEllipse (pero, 154, 90, 6, 6);. FillEllipse (mySe1, 154, 90, 6, 6);

f. DrawEllipse (pero, 183, 167, 5, 5);

f. FillEllipse (mySe1, 183, 167, 5, 5);. DrawEllipse (pero, 230, 167, 5, 5);

f. FillEllipse (mySe1, 230, 167, 5, 5);

f. DrawEllipse (pero, 279, 157, 5, 5);. FillEllipse (mySe1, 279, 157, 5, 5);. DrawEllipse (pero, 293, 120, 5, 5);. FillEllipse (mySe1, 293, 120, 5, 5);

}(k== 1)

{= 0;

= new Pen (Color. Tomato, 4);. DrawLine (pero, 85, 240, 125, 200); // первая линия. DrawLine (pero, 125, 200, 185, 170); // 2. DrawLine (pero, 185, 170, 230, 170); // 3. DrawLine (pero, 230, 170, 280, 160); // 4

f. DrawLine (pero, 280, 160, 295, 120); // 5

f. DrawLine (pero, 125, 200, 80, 140);. DrawLine (pero, 185, 170, 160, 130);. DrawLine (pero, 160, 130, 155, 90);mySe = new SolidBrush (Color. Tomato);. DrawEllipse (pero, 82, 238, 7, 7);. FillEllipse (mySe, 82, 238, 7, 7);

f. DrawEllipse (pero, 123, 197, 5, 5);

f. FillEllipse (mySe, 123, 197, 5, 5);. DrawEllipse (pero, 80, 140, 5, 5);. FillEllipse (mySe, 80, 140, 5, 5);. DrawEllipse (pero, 159, 130, 5, 5);. FillEllipse (mySe, 159, 130, 5, 5);. DrawEllipse (pero, 154, 90, 6, 6);. FillEllipse (mySe, 154, 90, 6, 6);. DrawEllipse (pero, 183, 167, 5, 5);. FillEllipse (mySe, 183, 167, 5, 5);. DrawEllipse (pero, 230, 167, 5, 5);. FillEllipse (mySe, 230, 167, 5, 5);. DrawEllipse (pero, 279, 157, 5, 5);. FillEllipse (mySe, 279, 157, 5, 5);. DrawEllipse (pero, 293, 120, 5, 5);

f. FillEllipse (mySe, 293, 120, 5, 5);

}

}

}


Рисунок 2

Похожие работы на - Анимация объектов в диалоговых Windows-приложениях, способы создания

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!