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

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

<p>Тип Point(F)</p>

Первым утилитарным типом, о котором вам следует знать, является тип 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();

  }

 }

}

<p>Тип Rectangle(F)</p>

Типы 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();

}

<p>Класс Region</p>

Тип Region представляет внутреннюю часть геометрической фигуры. С учетом этого становится ясно, почему конструкторы класса Region требуют, чтобы вы предоставили им на вход некоторый уже существующий геометрический шаблон. Предположим, например, что вы создали прямоугольник размером 100×100 пикселей. Чтобы получить доступ к внутренней области прямоугольника, вы можете написать следующее.

// Получение внутренней части прямоугольника.

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

Region rgn = new Region(r);

Перейти на страницу:

Похожие книги