Рисование текста

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

 

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

public void DrawString(string s, Font font, Brush brush, RectangleF lagoutRectangle);

public void DrawString(string s, Font font, Brush brush, float x, float y);

 

Параметры:

s –строка символов,

font – шрифт текста,

brush – кисть,

point – точка, определяющая координаты вывода текста,

x и y – задают координаты вывода текста

layoutRectangle – прямоугольник, внутри которого выводится текст, если же текст не вмещается в область прямоугольника, то он (текст) обрезается.

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

 

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

dc.DrawString("Привет!",fnt, Brushes.Green,10,20);

Пример:

//Рисуем на фоне прямоугольника текст

//местоположение прямоугольника определяется

//координатами щелчка мыши

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

namespace WindowsApplication3

{

 

public partial class Form1 : Form

{

Brush br; // Объявляем кисть

Font fnt; // Объявляем шрифт

public Form1()

{

InitializeComponent();

//Создаем полупрозрачную кисть

br= new SolidBrush(Color.FromArgb(100,253,210,150));

//Создаем шрифт Arial, размер 10

fnt = new Font("Arial", 10);

}

//Обработчик щелчка мыши на поверхности формы

private void Form1_MouseDown(object sender, MouseEventArgs e)

{

//Создаем контекст устройства

Graphics dc = CreateGraphics();

//Рисуем на фоне прямоугольника текст

//местоположение прямоугольника определяется

//координатами щелчка мыши

dc.FillRectangle(br, e.X, e.Y, 50, 20);

dc.DrawString("Привет!", fnt, Brushes.Green, e.X, e.Y);

}

}

}

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

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

 

private void Form_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

 

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

 

Graphics dc = e.Graphics;

 

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

Очень часто перерисовка окна должна происходить в определенные моменты времени по инициативе приложения. Это бывает необходимо при выводе на экран анимации. «Заставить» операционную систему выработать событие Paint можно путем вызова метода Invalidate(), который является членом System.Windows.Forms.Form. Существуют несколько перегруженных версий этого меода. Одна из них принимает в качестве параметра прямоугольник, который определяет область окна для перерисовки.

Используемая нами версия без параметров, в приведенном ниже примере, перерисовывает все окно:

// С помощью контекста устройсва рисум три прямоугольника

// формируя изображение Российского флага

//местоположение определяется

//координатами щелчка мыши

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

namespace WindowsApplication2

{

public partial class Form1 : Form

{

int x; //Объявляем переменные для

int y; // запоминания координат щелчка мыши

public Form1()

{

InitializeComponent();

}

// Обработчик события щелчка мыши на поверхности формы

private void Form1_MouseDown(object sender, MouseEventArgs e)

{

x = e.X; // запоминаем координаты x и y в момент

y = e.Y; // щелчка мыши на поверхности формы

Invalidate();//"просим" ОС перерисовать окно

}

// Обработчик события события Paint

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics dc = e.Graphics;// Создаем котекст устройства

// С помощью контекста устройсва рисум три прямоугольника

// формируя изображение Российского флага

dc.FillRectangle(Brushes.White, x, y, 80, 10);

dc.FillRectangle(Brushes.Blue, x, y+10, 80, 10);

dc.FillRectangle(Brushes.Red, x, y+20, 80, 10);

}

 

}

}

Вопросы:

1. Что собой представляет интерфейс графических устройств?

2. Что такое контекст устройства? Как он создается?

3. С помощью, каких методов контекста устройств осуществляется рисование линий?

4. С помощью, каких методов контекста устройств осуществляется рисование прямоугольников?

5. С помощью, каких методов контекста устройств осуществляется рисование эллипсов?

6. Как задать тип и размер шрифта текста?

7. Как можно нарисовать текст по заданным координатам, в заданном прямоугольнике?

8. Какая функция, обработчик события Paint, вызывается для перерисовки окна приложения?

9. С помощью вызова, какой функции можно инициализировать ОС для генерации события Paint?