Обрезка регионов
Область обрезки — это один из графических объектов, которые приложение может выбрать в контексте устройства (DC). Обычно он прямоугольный. Некоторые контексты устройств предоставляют предопределенную или отсеченную область по умолчанию, а другие — нет. Например, если вы получаете дескриптор контекста устройства из функции BeginPaint , контроллер домена содержит предопределенную прямоугольную область обрезки, соответствующую недопустимому прямоугольнику, требующего перерисовки. Однако при получении дескриптора контекста устройства путем вызова функции GetDC с параметром hWndNULL или вызова функции CreateDC контроллер домена не содержит область обрезки по умолчанию. Дополнительные сведения о контекстах устройства, возвращаемых функцией BeginPaint , см. в разделе Рисование и рисование . Дополнительные сведения о контекстах устройств, возвращаемых функциями CreateDC и GetDC , см. в разделе Контексты устройств.
Приложения могут выполнять различные операции с обрезкой регионов. Для некоторых из этих операций требуется дескриптор, определяющий регион, а для некоторых — нет. Например, приложение может выполнять следующие операции непосредственно в области обрезки контекста устройства.
- Определите, отображаются ли графические выходные данные в границах области, передав координаты соответствующей линии, дуги, растрового изображения, текста или заполненной фигуры в функцию PtVisible .
- Определите, пересекается ли часть клиентской области с регионом, вызвав функцию RectVisible .
- Переместите существующую область на указанное смещение, вызвав функцию OffsetClipRgn .
- Исключите прямоугольную часть клиентской области из текущей области обрезки, вызвав функцию ExcludeClipRect .
- Объедините прямоугольную часть клиентской области с текущей областью обрезки, вызвав функцию IntersectClipRect .
После получения дескриптора, определяющего регион обрезки, приложение может выполнять любые операции, которые являются общими для регионов, например:
- Объединение копии текущей области обрезки со второй областью путем вызова функции CombineRgn .
- Сравните копию текущей отсеченной области со второй, вызвав функцию EqualRgn .
- Определите, находится ли точка внутри копии текущей области обрезки, вызвав функцию PtInRegion .