Поделиться через


Регионы (GDI+)

Область — это часть поверхности отображения. Области могут быть простыми (один прямоугольник) или сложными (сочетание многоугольников и закрытых кривых). На следующем рисунке показаны два региона: один построен из прямоугольника, а другой — на основе пути.

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

Регионы часто используются для отрезки и тестирования попаданий. Вырезка включает ограничение рисования в определенном регионе экрана, как правило, часть экрана, которая должна быть обновлена. Тестирование нажатия включает проверку того, находится ли курсор в определенном регионе экрана при нажатии кнопки мыши.

Вы можете создать регион из прямоугольника или из пути. Кроме того, можно создать сложные регионы, объединив существующие регионы. Класс Region предоставляет следующие методы для объединения регионов: intersect, Union, Xor, исключитьи регион::Дополнение.

Пересечение двух регионов — это набор всех точек, принадлежащих обоим регионам. Объединение — это набор всех точек, принадлежащих одному или другому или обоим регионам. Дополнением региона является набор всех точек, которые не находятся в регионе. На следующем рисунке показан пересечение и объединение двух регионов на предыдущем рисунке.

иллюстрация, показывающая пересечение регионов на предыдущем рисунке и их пересечение

Метод Xor, применяемый к паре регионов, создает регион, содержащий все точки, принадлежащие одному или другому, но не оба. Метод исключить, применяемый к паре регионов, создает регион, содержащий все точки в первом регионе, которые не находятся во втором регионе. На следующем рисунке показаны регионы, которые приводят к применению методов Xor и Exclude к двум регионам, показанным в начале этого раздела.

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

Чтобы заполнить регион, требуется объектграфики, объект Brush и объект Region. Объект graphics предоставляет метод Graphics::FillRegion, а объект Brush сохраняет атрибуты заливки, например цвет или шаблон. В следующем примере область заполняется сплошным цветом.

myGraphics.FillRegion(&mySolidBrush, &myRegion);