Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_1 / С_15_Работа с графикой.ppt
Скачиваний:
14
Добавлен:
19.04.2015
Размер:
1.4 Mб
Скачать

Вывод текста

Для вывода текста используют перегруженный метод DrawString.

DrawString(string s, Font font, Brush brush, PointF point);

DrawString(string s, Font font, Brush brush, RectangleF layoutRectangle);

Параметры:

s –строка символов, font – шрифт текста,

brush – кисть для рисования символов,

point – точка, определяющая координаты вывода текста, x и y – задают координаты вывода текста layoutRectangle – ограничивающий прямоугольник.

Для вывода текста необходимо задать тип и размер шрифта, кисть и координаты текста.

Например:

Font fnt = new Font("Arial",10); //Шрифт Arial,

Пример:

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

Для этого используем событие MouseDown :

Перерисовка окна приложения

Операционная система не восстанавливает при перерисовке содержимое окна. Восстановлением графики и текста должно заниматься само приложение. ОС в необходимых случаях вырабатывает сообщение (событие Paint), которое «говорит», что окно приложения не корректно и его необходимо перерисовать. Перерисовка окна должна происходить в обработчике этого события. Метод-обработчик этого события имеет заголовок:

Form_Paint(object sender, PaintEventArgs e)

Для этого метода не надо создавать контекст устройства, он передается методу с помощью параметра e. Для получения контекста устройства необходимо выполнить следующую

операцию:

Graphics dc = e.Graphics;

В теле этой функции необходимо выполнить все действия для

перерисовки окна.

Очень часто перерисовка окна должна происходить в определенные моменты времени по инициативе приложения. Это бывает необходимо, например, при выводе на экран анимации.

«Заставить» операционную систему выработать событие Paint можно путем вызова метода Invalidate(), который является

членом System.Windows.Forms.Form.

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

При вызове метода без параметров перерисовывается все окно.

Пример:

Создадим приложение, в котором прямоугольник через каждые 150 мс перемещается вправо на 5 пикселей.

1. Объявим в классе Form1 переменную: private int xLeft;

2. Создадим метод-обработчик события Paint для формы: private void Form1_Paint(object sender,

PaintEventArgs e)

{

Graphics dc = e.Graphics; dc.DrawRectangle(Pens.RoyalBlue, xLeft, 100,

50, 50);

}

3. Перенесем на форму Timer из Toolbox, затем в свойствах таймера установим свойство Enable в true и Interval в 150.

4. Cоздадим метод-обработчик таймера: private void timer1_Tick(object sender,

System.EventArgs e)

{

xLeft += 5; Invalidate();

}

Пример :

Создадим приложение, в котором изображение перемещается по форме по сложной траектории.

1. Объявим в классе Form1 переменные, отвечающие за положение фигуры и за текущее «время». Т.к. возможны дробные значения, то переменные объявляются вещественными:

float x0 = 230; float y0 = 180;

float t = 0;

2. Создадим метод-обработчик события Paint для формы: private void Form1_Paint(object sender,

PaintEventArgs e)

{

Graphics g = e.Graphics; DrawSheep(g, x0, y0, t);

}

3. Далее опишем пользовательский метод DrawSheep(), рисующий фигуру:

void DrawSheep(Graphics g, float x0, float y0, float t)

{

 

 

 

 

Pen p1 = new Pen(Color.Blue,

2);

Pen p2

= new Pen(Color.Red,

3);

Pen p3

=

new

Pen(Color.Gray,

4);

Pen p4

=

new

Pen(Color.Black, 3);

SolidBrush b1 = new SolidBrush(Color.Green);

g.FillEllipse(b1, x0, y0, 100, 50);

float xhead = x0 + 60; float yhead = y0 - 20;

g.DrawPolygon(p1, new PointF[]

{new PointF(xhead, yhead),

new PointF(xhead + 30, yhead +

30),

new PointF(xhead + 60, yhead) });

g.DrawEllipse(p2, x0 + 80, y0 - 12, 5, 5); g.DrawEllipse(p2, x0 + 95, y0 - 12, 5, 5);

g.DrawArc(p3, x0 + 20, y0 - 45, 50, 50, 0, -90); g.DrawArc(p3, x0 + 60, y0 - 45, 50, 50, 0, -90);

float ylegs = y0 + 42;

float xlegs = x0 + 10; g.DrawLines(p4, new PointF[] {

new PointF(xlegs, ylegs),

new PointF(xlegs + 20 * (1 - t), ylegs

+ 20),

new PointF(xlegs, ylegs + 40) });

xlegs = xlegs + 20; g.DrawLines(p4, new PointF[] {

new PointF(xlegs, ylegs),

new PointF(xlegs + 20 * (1 - t), ylegs

+ 20),

new PointF(xlegs, ylegs + 40) });

xlegs = xlegs + 40; g.DrawLines(p4, new PointF[] {

new PointF(xlegs, ylegs),

new PointF(xlegs + 20 * (1 - t), ylegs

+ 20),

new PointF(xlegs, ylegs + 40) });

xlegs = xlegs + 20; g.DrawLines(p4, new PointF[] {

new PointF(xlegs, ylegs),

new PointF(xlegs + 20 * (1 - t), ylegs

+ 20),

new PointF(xlegs, ylegs + 40) });

g.DrawArc(p4, x0 - 25, y0 + 12,

}