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



Учреждение образования

«Белорусский государственный педагогический университет

имени Максима Танка»

 

 

Математический факультет

 

Кафедра прикладной математики и информатики

 

Курсовая работа

 

 

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

 

 

 

 

 

 

 

 

 

студентки 3-го курса

математического факультета

Авсюкевич Анны Викторовны

 

Научный руководитель

Нарейко Нина Николаевна

 

Защищена «__» ________2011 г.

с оценкой «____________»

 

 

 

 

Минск, 2011

 


ОГЛАВЛЕНИЕ

 

Введение……………………………………………………………………….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

 

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 передается в качестве аргумента.

 

Задача моей курсовой работы — научиться работать с выводом на форму графики (изображения и текста). Я начну с обзора многочисленных пространств имен, предназначенных для работы с графикой в .NET. Мы узнаем, как инициировать сеансы вывода графики и как реагировать на эти сеансы в приложении. Кроме того, мы рассмотрим многочисленные возможности объекта Graphics и приемы работы с ним. При этом нам не обойтись без знакомства с такими типами, как Brush, Pen, Color, Point(а также множеством других).

 

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

 

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

 

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

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

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

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

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

System.Drawing

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

System,Drawing,Drawing2D

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

System.Drawing.Imaging

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

System.Drawing.Text

Это пространство имен позволяет работать с системными шрифтами.

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

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

using System.Drawing;

и можно приступать к работе с графикой.

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

 

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

 

Таблица 2, Типы пространства имен 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 с заданными свойствами (например, с установленным цветом)

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). Наиболее важные члены этого класса представлены в табл. 3.

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

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

Член

Назначение

+

-

=

!=

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

 

Х

y

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

IsEmpty

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

Offset()

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

Тип Size(F)

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

 

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

Член

Назначение

+

-

=

!=

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

 

                      Height

                      Width

 

Эти свойства определяют высоту и ширину — два размера, с которыми работает Size(F)

 

 

 

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

 

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

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

Метод

Назначение

FromHdc()

FromHwnd()

Fromlmage()

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

Clear()

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

DrawArc()

DrawBezler()

DrawBeziers()

DrawCurve()

DrawEllipse()

DrawIcon()

DrawLine()

DrawString()

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

 

FillElllpse()

                       FillPath()

FillPie()

FillPolygon()

FillRectangle()

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

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

 

Таблица 6. Свойства класса 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

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

 

 

 

 

 

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

 

 

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

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

 

Классы 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. Эти перечисления представлены в табл.8.

 

Перечисления System.Drawing.Drawing2D

 

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

Назначение

DashStyle

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

FillMode

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

HatchStyle

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

LinearGradientMode

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

LineCap

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

PenAlignment

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

РепТуре

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

QualityMode

SmoothingMode

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

 

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