Первый служебный тип, о котором вам следует знать — это System.Drawing.Point (PointF). В отличие от иллюстративных типов Point, которые создавались в начальных главах, тип GDI + Point (PointF) поддерживает ряд полезных членов, включая:
- +, -, ==,!= — тип Point перегружает различные операции C#;
- X, Y — эти члены предоставляют доступ к лежащим в основе Point значениям (x, y);
- IsEmpty — этот член возвращает true, если x и y равны 0.
Для иллюстрации работы со служебными типами GDI + рассмотрим пример консольного приложения (по имени UtilTupes), которое использует тип 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("Points are the same");
else
WriteLine("Different points");
// Изменить в pt2 значение X.
pt2.X = 4000;
// Теперь показать каждое значение X.
Console.WriteLine("First point: {0} ", pt);
Console.WriteLine("Second point: {0} ", pt2);
Console.ReadLine();
}
}
}
Тип Rectangle (RectangleF)
|
|
Тип Rectangle, как и Point, полезен во многих приложениях (как на основе GDI, так и нет). Один из наиболее полезных методов типа Rectangle — это Contains (). Этот метод позволяет определять, находится ли данный экземпляр Point или Rectangle в пределах текущих границ другого объекта. Далее в этой главе вы увидите применение этого метода для выполнения проверки попадания на изображения GDI +. А пока рассмотрим простой пример:
static void Main(string[] args)
{
...
// Point изначально вне границ прямоугольника.
Rectangle r1 = new Rectangle(0, 0, 100, 100);
Point pt3 = new Point(101, 101);
if(r1.Contains(pt3))
Console.WriteLine("Point is within the rect!");
else
Console.WriteLine("Point is not within the rect!");
// Теперь поместим точку внутрь прямоугольника.
pt3.X = 50;
pt3.Y = 30;
if(r1.Contains(pt3))
Console.WriteLine("Point is within the rect!"); // внутри
else
Console.WriteLine("Point is not within the rect!"); // не внутри
Console.ReadLine();
}