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


Обрезка регионов

Область обрезки — это один из графических объектов, которые приложение может выбрать в контексте устройства (DC). Обычно он прямоугольный. Некоторые контексты устройств предоставляют предопределенную или отсеченную область по умолчанию, а другие — нет. Например, если вы получаете дескриптор контекста устройства из функции BeginPaint , контроллер домена содержит предопределенную прямоугольную область обрезки, соответствующую недопустимому прямоугольнику, требующего перерисовки. Однако при получении дескриптора контекста устройства путем вызова функции GetDC с параметром hWndNULL или вызова функции CreateDC контроллер домена не содержит область обрезки по умолчанию. Дополнительные сведения о контекстах устройства, возвращаемых функцией BeginPaint , см. в разделе Рисование и рисование . Дополнительные сведения о контекстах устройств, возвращаемых функциями CreateDC и GetDC , см. в разделе Контексты устройств.

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

  • Определите, отображаются ли графические выходные данные в границах области, передав координаты соответствующей линии, дуги, растрового изображения, текста или заполненной фигуры в функцию PtVisible .
  • Определите, пересекается ли часть клиентской области с регионом, вызвав функцию RectVisible .
  • Переместите существующую область на указанное смещение, вызвав функцию OffsetClipRgn .
  • Исключите прямоугольную часть клиентской области из текущей области обрезки, вызвав функцию ExcludeClipRect .
  • Объедините прямоугольную часть клиентской области с текущей областью обрезки, вызвав функцию IntersectClipRect .

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

  • Объединение копии текущей области обрезки со второй областью путем вызова функции CombineRgn .
  • Сравните копию текущей отсеченной области со второй, вызвав функцию EqualRgn .
  • Определите, находится ли точка внутри копии текущей области обрезки, вызвав функцию PtInRegion .