Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Троелсен Э. Язык программирования С# 2010 и п...docx
Скачиваний:
113
Добавлен:
21.09.2019
Размер:
6.92 Mб
Скачать

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

Большинство типов, которые вам придется использовать при создании GDI-приложений, содержится в пространстве имен System.Drawing. Как и следует ожидать, здесь есть классы, представляющие изображения, кисти, перья и шрифты. Кроме того, System.Drawing определяет ряд связанных утилитарных типов, таких как Color (цвет), Point (точка) и Rectangle (прямоугольник). В табл. 20.2 предлагаются описания некоторых базовых типов этого пространства имен.

Утилитарные типы System.Drawing

Многие из методов визуализации, определенные объектом System.Drawing. Graphics, требуют указать позицию или область, в которой требуется отобразить данный элемент. Например, метод DrawString() требует, чтобы вы указали позицию, в которой нужно отобразить текстовую строку в производном от Control типе. Метод DrawString() является перегруженным, поэтому параметр позиции можно указать как в виде координаты (х, у), так и в виде размеров "бокса", в котором нужно выполнить визуализацию. Другие методы GDI+ могут требовать, чтобы вы указали ширину и высоту данного элемента или внутренние границы геометрического образа.

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

Тип

Описание

Bitmap

Тип, инкапсулирующий данные изображения (*.bmp или какого-то другого)

Brush Brushes SolidBrush SystemBrushes TextureBrush

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

BufferedGraphics

Новый тип .NET 2.0, обеспечивающий графический буфер для двойной буферизации, которая используется для уменьшения или полного исключения влияния эффекта мелькания, возникающего при перерисовке изображений

Color SystemColors

Типы Color и SystemColors определяет ряд статических свойств, доступных только для чтения и используемых для получения нужного цвета при использовании различных перьев и кистей

Font FontFamily

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

Graphics

Представляет реальную поверхность нанесения изображения, а также предлагает ряд методов для визуализации текста, изображений и геометрических шаблонов

Icon SystemIcons

Представляют пользовательские пиктограммы, а также набор стандартных пиктограмм, предлагаемых системой

Image ImageAnimator

Тип Image – это абстрактный базовый класс, необходимый для поддержки функциональных возможностей типов Bitmap, Icon и Cursor. Тип ImageAnimator обеспечивает возможность выполнения цикла по набору типов Image из некоторого заданного интервала

Pen Pens SystemPens

Pens – это объекты, используемые для построения линий и кривых. Тип Pen определяет ряд статических свойств, возвращающих новый объект Pen заданного цвета

Point PointF

Структуры, представляющие отображение координаты (x, y) в соответствующее целое значение или значение с плавающей точкой, соответственно

Rectangle RectangleF

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

Size SizeF

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

StringFormat

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

Region

Тип, описывающий геометрический образ, скомпонованный из прямоугольников и траекторий

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

Члены-переменные, используемые типами Point, Rectangle, Region и Size, внутренне представлены целочисленными данными. Если вам потребуется более "тонкая" детализация, можете использовать, соответственно, типы PointF, RectangleF и SizeF, которые (как вы можете догадаться) отображаются в соответствующие значения с плавающим разделителем. Но, независимо от внутреннего представления, все эти типы имеют аналогичные множества членов, включая ряд перегруженных операторов.

Тип Point(F)

Первым утилитарным типом, о котором вам следует знать, является тип System.Drawing.Point(F). В отличие от иллюстративных типов Point, создававшихся в предыдущих главах, тип Point(F) GDI+ поддерживает целый ряд очень полезных членов, включая следующие:

• +, -, ==, != – перегруженные варианты различных C#-операций;

• X, Y – обеспечивают доступ к соответствующим внутренним значениям (х, у) типа Point;

• IsEmpty – возвращает true (истина), если x и у установлены равными 0.

Для иллюстрации работы с утилитарными типами GDI+ рассмотрите следующее консольное приложение (названное UtilTypes), в котором используется тип System.Drawing.Point (не забудьте установить ссылку на System.Drawing.dll).

using System;

using System.Drawing;

namespace UtilTypes {

 public class Program {

  static void Main(string[] args) {

   // Создание и смещение точки.

   Point pt = new Point(100, 72);

   Console.WriteLine(pt);

   pt.Offset(20, 20);

   Console.WriteLine(pt);

   // Перегруженные операции Point.

   Point pt2 = pt;

   if (pt == pt2) WriteLine ("Точки одинаковы");

   else WriteLine("Точки различны");

   // Изменение значения X для pt2.

   pt2.X = 4000;

   // Отображение каждого значения X.

   Console.WriteLine("Первая точка: {0} ", pt);

   Console.WriteLine("Вторая точка: {0} ", рt2);

   Console.ReadLine();

  }

 }

}

Тип Rectangle(F)

Типы Rectangle, подобно Point, оказываются полезными во многих приложениях (и особенно в GUI-приложениях). Одним из наиболее полезных методов типа Rectangle является метод Contains(). Этот метод позволяет выяснить, находится ли данный тип Point или Rectangle в рамках границ некоторого другого объекта. Позже в этой же главе вы увидите, как использовать этот метод для проверки попадания в область GDI-изображений. А пока что рассмотрите следующий простой пример.

static void Main(string[] args) {

 …

 // Вначале Point находится вне прямоугольника.

 Rectangle r1 = new Rectangle(0, 0, 100, 100);

 Point pt1 = new Point(101, 101);

 if (r1.Contains(pt3)) Console.WriteLine("Point находится внутри прямоугольника!");

 else Console.WriteLine("Point находится вне прямоугольника!");

 // Теперь поместим Point в прямоугольник.

 pt3.X 50;

 pt3.Y = 30;

 if (r1.Contains(pt3)) Console.WriteLine("Point находится внутри прямоугольника!");

 else Console.WriteLine("Point находится вне прямоугольника!");

 Console.ReadLine();

}