Для вывода линий, геометрических фигур, текста и изображений необходимо создать экземпляр класса Graphics, описанного в пространстве имен System.Drawing. Существуют различные способы создания этого объекта.
Первый способ состоит в том, что ссылку на объект Graphics получают из параметра PaintEventArgs, передаваемого в обработчик события Paint, возникающего при необходимости прорисовки формы или элемента управления:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics; // использование объекта
}
Второй способ — использование метода CreateGraphics, описанного в классах
формы и элемента управления:
Graphics g;
g = this. CreateGraphics();
Третий способ — создание объекта с помощью объекта-потомка Image. Этот способ используется для изменения существующего изображения:
Bitmap bm = new Bitmap("d:\\picture.bmp");
Graphics g = Graphics.Fromlmage(bm);
После создания объекта типа Graphics его можно применять для вывода линий,
геометрических фигур, текста и изображений. Основными объектами, которые
при этом используются, являются объекты классов:
|
|
□ Pen — рисование линий и контуров геометрических фигур;
□ Brush — заполнение областей;
□ Font — вывод текста;
□ Color — цвет.
В листинге 14.6 представлен код приложения, в котором на форму выводятся линия, эллипс и текст. Вид формы приведен на рис. 14.13.
Листинг 14.6. Работа с графическими объектами
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1: Form
{
public Form1() { InitializeComponent(); }
private void Forml_Paint(object sender, PaintEventArgs e)
{
using (Graphics g = e.Graphics) // 1
{
using (Pen pen = new Pen(Color.Red)) // 2
{
g.DrawLine(pen, 0, 0, 200, 100);
g.DrawEllipse(pen, new Rectangle(50, 50, 100, 150));
}
string s = "Sample Text";
Font font = new Font("Arial", 18); // 3
SolidBrush brush = new SolidBrush(Color.Black); //4
float x = 100.0F;
float у = 20.0F;
g.DrawString(s, font, brush, x, у);
font.Dispose(); // 5
brush.Dispose(); // 6
}
}
}
}
Рис. 14.13. Форма с графикой
Графические объекты потребляют системные ресурсы, поэтому рекомендуется вызывать для них метод освобождения ресурсов Dispose. Для упрощения работы с такими объектами в С# есть оператор using со следующим синтаксисом:
using (выделение_ресурса) оператор
Ключевое слово using используется в С# в двух не связанных между собой случаях: как директива и как оператор. Директива using была рассмотрена ранее.
Под ресурсом здесь понимается объект, который реализует интерфейс System. IDisposable, включающий метод Dispose. Код, использующий ресурс, вызовом этого метода сигнализирует о том, что ресурс больше не требуется. Если метод Dispose не был вызван, освобождение ресурса выполняется в процессе сборки мусора.
Оператор using неявным образом вызывает метод Dispose в случае успешного создания и использования объекта. Этот способ применен в операторах 1 и 2.
В операторах 3 и 4 объекты создаются обычным образом, поэтому для них требуется явный вызов Dispose, что и происходит в операторах 5 и 6. Как видно даже из этого простого листинга, для вывода графики требуется кропотливое изучение множества свойств и методов множества стандартных классов, описание которых, во-первых, очень объемное, во-вторых, невыносимо скучное, а в-третьих, не входит в задачу учебника по основам программирования.
|
|