Класс CRgn
Инкапсулирует область интерфейса графических устройств Windows (GDI).
Синтаксис
class CRgn : public CGdiObject
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CRgn::CRgn | Формирует объект CRgn . |
Открытые методы
Имя | Описание |
---|---|
CRgn::CombineRgn | CRgn Задает объект таким образом, чтобы он был эквивалентен объединению двух указанных CRgn объектов. |
CRgn::CopyRgn | CRgn Задает объект таким образом, чтобы он был копией указанного CRgn объекта. |
CRgn::CreateEllipticRgn | Инициализирует CRgn объект с эллиптической областью. |
CRgn::CreateEllipticRgnIndirect | Инициализирует CRgn объект с эллиптической областью, определенной структурой RECT . |
CRgn::CreateFromData | Создает регион из заданного региона и данных преобразования. |
CRgn::CreateFromPath | Создает регион из пути, выбранного в заданном контексте устройства. |
CRgn::CreatePolygonRgn | Инициализирует CRgn объект с многоугольником. Система автоматически закрывает многоугольник, при необходимости нарисовав линию от последней вершины к первой. |
CRgn::CreatePolyPolygonRgn | Инициализирует CRgn объект с областью, состоящей из ряда закрытых многоугольников. Многоугольники могут быть развязаны или могут перекрываться. |
CRgn::CreateRectRgn | Инициализирует CRgn объект с прямоугольной областью. |
CRgn::CreateRectRgnIndirect | Инициализирует CRgn объект с прямоугольной областью, определенной усечением RECT. |
CRgn::CreateRoundRectRgn | Инициализирует CRgn объект с прямоугольной областью с округленными углами. |
CRgn::EqualRgn | Проверяет два CRgn объекта, чтобы определить, эквивалентны ли они. |
CRgn::FromHandle | Возвращает указатель на CRgn объект при указании дескриптора в регионе Windows. |
CRgn::GetRegionData | Заполняет указанный буфер данными, описывающими заданный регион. |
CRgn::GetRgnBox | Извлекает координаты ограничивающего CRgn прямоугольника объекта. |
CRgn::OffsetRgn | CRgn Перемещает объект по указанным смещениям. |
CRgn::P tInRegion | Определяет, находится ли указанная точка в регионе. |
CRgn::RectInRegion | Определяет, находится ли любая часть указанного прямоугольника в границах региона. |
CRgn::SetRectRgn | CRgn Задает объект указанному прямоугольнику. |
Открытые операторы
Имя | Описание |
---|---|
CRgn::operator HRGN | Возвращает дескриптор Windows, содержащийся в объекте CRgn . |
Замечания
Область — это многоугольник или многоугольник в окне. Чтобы использовать регионы, используйте функции-члены класса CRgn
с функциями обрезки, определенными как члены класса CDC
.
Функции-члены создания, изменения и получения сведений CRgn
об объекте региона, для которого они вызываются.
Дополнительные сведения об использовании CRgn
см. в разделе "Графические объекты".
Иерархия наследования
CRgn
Требования
Заголовок: afxwin.h
CRgn::CombineRgn
Создает новый регион GDI путем объединения двух существующих регионов.
int CombineRgn(
CRgn* pRgn1,
CRgn* pRgn2,
int nCombineMode);
Параметры
pRgn1
Определяет существующий регион.
pRgn2
Определяет существующий регион.
nCombineMode
Указывает операцию, выполняемую при объединении двух исходных регионов. Это может быть любое из следующих значений:
RGN_AND Использует перекрывающиеся области обоих регионов (пересечение).
RGN_COPY Создает копию региона 1 (идентифицируется pRgn1).
RGN_DIFF Создает регион, состоящий из областей 1 (идентифицируемых pRgn1), которые не являются частью региона 2 (идентифицируются pRgn2).
RGN_OR объединяет оба региона в целом (объединение).
RGN_XOR Объединяет оба региона, но удаляет перекрывающиеся области.
Возвращаемое значение
Указывает тип результирующего региона. Может иметь одно из следующих значений.
В новом регионе COMPLEXREGION есть перекрывающиеся границы.
ERROR No new region created.
Новый регион NULLREGION пуст.
В новом регионе SIMPLEREGION нет перекрывающихся границ.
Замечания
Регионы объединяются, как указано в nCombineMode.
Два указанных региона объединяются, а результирующий дескриптор региона хранится в объекте CRgn
. Таким образом, любой регион, хранящийся в объекте CRgn
, заменяется объединенным регионом.
Размер региона ограничен 32 767 на 32 767 логических единиц или 64 КБ памяти, в зависимости от того, что меньше.
Используйте CopyRgn , чтобы просто скопировать один регион в другой регион.
Пример
CRgn rgnA, rgnB, rgnC;
VERIFY(rgnA.CreateRectRgn(50, 50, 150, 150));
VERIFY(rgnB.CreateRectRgn(100, 100, 200, 200));
VERIFY(rgnC.CreateRectRgn(0, 0, 50, 50));
int nCombineResult = rgnC.CombineRgn(&rgnA, &rgnB, RGN_OR);
ASSERT(nCombineResult != ERROR && nCombineResult != NULLREGION);
CBrush br1, br2, br3;
VERIFY(br1.CreateSolidBrush(RGB(255, 0, 0))); // rgnA Red
VERIFY(pDC->FrameRgn(&rgnA, &br1, 2, 2));
VERIFY(br2.CreateSolidBrush(RGB(0, 255, 0))); // rgnB Green
VERIFY(pDC->FrameRgn(&rgnB, &br2, 2, 2));
VERIFY(br3.CreateSolidBrush(RGB(0, 0, 255))); // rgnC Blue
VERIFY(pDC->FrameRgn(&rgnC, &br3, 2, 2));
CRgn::CopyRgn
Копирует регион, определенный pRgnSrc в CRgn
объект.
int CopyRgn(CRgn* pRgnSrc);
Параметры
pRgnSrc
Определяет существующий регион.
Возвращаемое значение
Указывает тип результирующего региона. Может иметь одно из следующих значений.
В новом регионе COMPLEXREGION есть перекрывающиеся границы.
ERROR No new region created.
Новый регион NULLREGION пуст.
В новом регионе SIMPLEREGION нет перекрывающихся границ.
Замечания
Новый регион заменяет регион, ранее хранящийся в объекте CRgn
. Эта функция является особым случаем функции-члена CombineRgn .
Пример
См. пример для CRgn::CreateEllipticRgn.
CRgn::CreateEllipticRgn
Создает эллиптические области.
BOOL CreateEllipticRgn(
int x1,
int y1,
int x2,
int y2);
Параметры
x1
Задает логическую координату x левого верхнего угла ограничивающего прямоугольника многоточия.
y1
Задает логическую координату y левого верхнего угла ограничивающего прямоугольника многоточия.
x2
Задает логическую координату x правого нижнего угла ограничивающего прямоугольника многоточия.
y2
Задает логическую координату Y правого нижнего угла ограничивающего прямоугольника многоточия.
Возвращаемое значение
Ненулевое значение, если операция выполнена успешно; в противном случае — 0.
Замечания
Область определяется ограничивающим прямоугольником, заданным x1, y1, x2 и y2. Регион хранится в объекте CRgn
.
Размер региона ограничен 32 767 на 32 767 логических единиц или 64 КБ памяти, в зависимости от того, что меньше.
Завершив использование региона, созданного с CreateEllipticRgn
помощью функции, приложение должно выбрать регион из контекста устройства и использовать DeleteObject
функцию для ее удаления.
Пример
CRgn rgnA, rgnB, rgnC;
VERIFY(rgnA.CreateEllipticRgn(200, 100, 350, 250));
VERIFY(rgnB.CreateRectRgn(0, 0, 50, 50));
VERIFY(rgnB.CopyRgn(&rgnA));
int nOffsetResult = rgnB.OffsetRgn(-75, 75);
ASSERT(nOffsetResult != ERROR && nOffsetResult != NULLREGION);
VERIFY(rgnC.CreateRectRgn(0, 0, 1, 1));
int nCombineResult = rgnC.CombineRgn(&rgnA, &rgnB, RGN_AND);
ASSERT(nCombineResult != ERROR && nOffsetResult != NULLREGION);
CBrush brA, brB, brC;
VERIFY(brC.CreateHatchBrush(HS_FDIAGONAL, RGB(0, 0, 255))); // Blue
VERIFY(pDC->FillRgn(&rgnC, &brC));
VERIFY(brA.CreateSolidBrush(RGB(255, 0, 0))); // rgnA Red
VERIFY(pDC->FrameRgn(&rgnA, &brA, 2, 2));
VERIFY(brB.CreateSolidBrush(RGB(0, 255, 0))); // rgnB Green
VERIFY(pDC->FrameRgn(&rgnB, &brB, 2, 2));
CRgn::CreateEllipticRgnIndirect
Создает эллиптические области.
BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);
Параметры
lpRect
Указывает на RECT
структуру или CRect
объект, содержащий логические координаты верхних и нижних правых углов ограничивающего прямоугольника многоточия.
Возвращаемое значение
Ненулевое значение, если операция выполнена успешно; в противном случае — 0.
Замечания
Регион определяется структурой или объектом, на который указывает lpRect , и хранится в объекте CRgn
.
Размер региона ограничен 32 767 на 32 767 логических единиц или 64 КБ памяти, в зависимости от того, что меньше.
Завершив использование региона, созданного с CreateEllipticRgnIndirect
помощью функции, приложение должно выбрать регион из контекста устройства и использовать DeleteObject
функцию для ее удаления.
Пример
См. пример для CRgn::CreateRectRgnIndirect.
CRgn::CreateFromData
Создает регион из заданного региона и данных преобразования.
BOOL CreateFromData(
const XFORM* lpXForm,
int nCount,
const RGNDATA* pRgnData);
Параметры
lpXForm
Указывает на структуру ata XFORM, которая определяет преобразование, выполняемое в регионе. Если этот указатель имеет значение NULL, используется преобразование удостоверения.
nCount
Указывает количество байтов, на которые указывает pRgnData.
pRgnData
Указывает на структуру данных RGNDATA , содержащую данные региона.
Возвращаемое значение
Ненулевое значение, если функция выполнена успешно; в противном случае — 0.
Замечания
Приложение может получить данные для региона, вызвав функцию CRgn::GetRegionData
.
CRgn::CreateFromPath
Создает регион из пути, выбранного в заданном контексте устройства.
BOOL CreateFromPath(CDC* pDC);
Параметры
pDC
Определяет контекст устройства, содержащий закрытый путь.
Возвращаемое значение
Ненулевое значение, если функция выполнена успешно; в противном случае — 0.
Замечания
Контекст устройства, определяемый параметром PDC , должен содержать закрытый путь. После CreateFromPath
преобразования пути в регион Windows удаляет закрытый путь из контекста устройства.
CRgn::CreatePolygonRgn
Создает многоугольник.
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode);
Параметры
lpPoints
Указывает на массив POINT
структур или массив CPoint
объектов. Каждая структура задает координату x и координату y одной вершины многоугольника. Структура POINT
имеет следующую форму:
typedef struct tagPOINT {
int x;
int y;
} POINT;
nCount
Указывает количество POINT
структур или CPoint
объектов в массиве, на которые указывает lpPoints.
nMode
Задает режим заполнения для региона. Этот параметр может иметь значение ALTERNATE или WINDING.
Возвращаемое значение
Ненулевое значение, если операция выполнена успешно; в противном случае — 0.
Замечания
Система автоматически закрывает многоугольник, при необходимости нарисовав линию от последней вершины к первой. Результирующий регион хранится в объекте CRgn
.
Размер региона ограничен 32 767 на 32 767 логических единиц или 64 КБ памяти, в зависимости от того, что меньше.
Если режим многоугольника является АЛЬТЕРНАТИВНЫМ, система заполняет область между нечетными и четными сторонами многоугольников на каждой линии сканирования. То есть система заполняет область между первой и второй стороной, между третьей и четвертой стороной и т. д.
Когда режим многоугольника заполняется, система использует направление, в котором рисуется рисунок, чтобы определить, следует ли заполнить область. Каждый сегмент линии в многоугольнике рисуется либо по часовой стрелке, либо в направлении счетчика. Всякий раз, когда мнимая линия, рисуемая из заключаемой области к внешней части фигуры, проходит через сегмент по часовой стрелке, число увеличивается. Когда линия проходит через сегмент линии счетчика с часовой стрелкой, количество уменьшается. Область заполняется, если число ненулевое, когда линия достигает за пределами фигуры.
После завершения работы приложения с помощью региона, созданного с CreatePolygonRgn
помощью функции, он должен выбрать регион из контекста устройства и использовать DeleteObject
функцию для ее удаления.
Пример
CRgn rgnA, rgnB;
CPoint ptVertex[5];
ptVertex[0].x = 180;
ptVertex[0].y = 80;
ptVertex[1].x = 100;
ptVertex[1].y = 160;
ptVertex[2].x = 120;
ptVertex[2].y = 260;
ptVertex[3].x = 240;
ptVertex[3].y = 260;
ptVertex[4].x = 260;
ptVertex[4].y = 160;
VERIFY(rgnA.CreatePolygonRgn(ptVertex, 5, ALTERNATE));
CRect rectRgnBox;
int nRgnBoxResult = rgnA.GetRgnBox(&rectRgnBox);
ASSERT(nRgnBoxResult != ERROR && nRgnBoxResult != NULLREGION);
CBrush brA, brB;
VERIFY(brA.CreateSolidBrush(RGB(255, 0, 0))); // rgnA Red
VERIFY(pDC->FrameRgn(&rgnA, &brA, 2, 2));
VERIFY(brB.CreateSolidBrush(RGB(0, 0, 255))); // Blue
rectRgnBox.InflateRect(3, 3);
pDC->FrameRect(&rectRgnBox, &brB);
CRgn::CreatePolyPolygonRgn
Создает регион, состоящий из ряда закрытых многоугольников.
BOOL CreatePolyPolygonRgn(
LPPOINT lpPoints,
LPINT lpPolyCounts,
int nCount,
int nPolyFillMode);
Параметры
lpPoints
Указывает на массив структур или массив POINT
CPoint
объектов, определяющих вершины многоугольников. Каждый многоугольник должен быть явно закрыт, так как система не закрывает их автоматически. Многоугольники задаются последовательно. Структура POINT
имеет следующую форму:
typedef struct tagPOINT {
int x;
int y;
} POINT;
lpPolyCounts
Указывает на массив целых чисел. Первое целое число указывает количество вершин в первом многоугольнике в массиве lpPoints , второе целое число указывает количество вершин во втором многоугольнике и т. д.
nCount
Указывает общее число целых чисел в массиве lpPolyCounts .
nPolyFillMode
Задает режим заполнения многоугольников. Это значение может иметь значение ALTERNATE или WINDING.
Возвращаемое значение
Ненулевое значение, если операция выполнена успешно; в противном случае — 0.
Замечания
Результирующий регион хранится в объекте CRgn
.
Многоугольники могут быть развязаны или могут перекрываться.
Размер региона ограничен 32 767 на 32 767 логических единиц или 64 КБ памяти, в зависимости от того, что меньше.
Если режим многоугольника является АЛЬТЕРНАТИВНЫМ, система заполняет область между нечетными и четными сторонами многоугольников на каждой линии сканирования. То есть система заполняет область между первой и второй стороной, между третьей и четвертой стороной и т. д.
Когда режим многоугольника заполняется, система использует направление, в котором рисуется рисунок, чтобы определить, следует ли заполнить область. Каждый сегмент линии в многоугольнике рисуется либо по часовой стрелке, либо в направлении счетчика. Всякий раз, когда мнимая линия, рисуемая из заключаемой области к внешней части фигуры, проходит через сегмент по часовой стрелке, число увеличивается. Когда линия проходит через сегмент линии счетчика с часовой стрелкой, количество уменьшается. Область заполняется, если число ненулевое, когда линия достигает за пределами фигуры.
После завершения работы приложения с помощью региона, созданного с CreatePolyPolygonRgn
помощью функции, он должен выбрать регион из контекста устройства и использовать функцию-член CGDIObject::D eleteObject , чтобы удалить ее.
CRgn::CreateRectRgn
Создает прямоугольную область, хранящуюся в объекте CRgn
.
BOOL CreateRectRgn(
int x1,
int y1,
int x2,
int y2);
Параметры
x1
Задает логическую координату x левого верхнего угла региона.
y1
Задает логическую координату Y верхнего левого угла региона.
x2
Задает логическую координату x правого нижнего угла региона.
y2
Задает логическую координату y в правом нижнем углу региона.
Возвращаемое значение
Ненулевое значение, если операция выполнена успешно; в противном случае — 0.
Замечания
Размер региона ограничен 32 767 на 32 767 логических единиц или 64 КБ памяти, в зависимости от того, что меньше.
Завершив использование региона, созданного CreateRectRgn
приложением, следует использовать функцию-член CGDIObject::D eleteObject для удаления региона.
Пример
CRgn rgn;
BOOL bSucceeded = rgn.CreateRectRgn(50, 20, 150, 120);
ASSERT(bSucceeded == TRUE);
Дополнительные примеры см. в разделе CRgn::CombineRgn.
CRgn::CreateRectRgnIndirect
Создает прямоугольную область, хранящуюся в объекте CRgn
.
BOOL CreateRectRgnIndirect(LPCRECT lpRect);
Параметры
lpRect
Указывает на RECT
структуру или CRect
объект, содержащий логические координаты верхнего левого и нижнего правых углов региона. Структура RECT
имеет следующую форму:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Возвращаемое значение
Ненулевое значение, если операция выполнена успешно; в противном случае — 0.
Замечания
Размер региона ограничен 32 767 на 32 767 логических единиц или 64 КБ памяти, в зависимости от того, что меньше.
Завершив использование региона, созданного CreateRectRgnIndirect
приложением, следует использовать функцию-член CGDIObject::D eleteObject для удаления региона.
Пример
CRgn rgnA, rgnB, rgnC;
CRect rectA(50, 50, 150, 150);
CRect rectB(100, 50, 200, 150);
VERIFY(rgnA.CreateRectRgnIndirect(&rectA));
VERIFY(rgnB.CreateEllipticRgnIndirect(&rectB));
VERIFY(rgnC.CreateRectRgn( 0, 0, 50, 50 ));
int nCombineResult = rgnC.CombineRgn( &rgnA, &rgnB, RGN_AND );
ASSERT( nCombineResult != ERROR && nCombineResult != NULLREGION );
CBrush brA, brB, brC;
VERIFY(brA.CreateSolidBrush( RGB(255, 0, 0) ));
VERIFY(pDC->FrameRgn( &rgnA, &brA, 2, 2 )); // rgnA Red
VERIFY(brB.CreateSolidBrush( RGB(0, 255, 0) ));
VERIFY(pDC->FrameRgn( &rgnB, &brB, 2, 2 )); // rgnB Green
VERIFY(brC.CreateSolidBrush( RGB(0, 0, 255) )); // rgnC Blue
VERIFY(pDC->FrameRgn( &rgnC, &brC, 2, 2 ));
CRgn::CreateRoundRectRgn
Создает прямоугольную область с округленными углами, хранящимися в объекте CRgn
.
BOOL CreateRoundRectRgn(
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
Параметры
x1
Задает логическую координату x левого верхнего угла региона.
y1
Задает логическую координату Y верхнего левого угла региона.
x2
Задает логическую координату x правого нижнего угла региона.
y2
Задает логическую координату y в правом нижнем углу региона.
x3
Задает ширину многоточия, используемой для создания округлых углов.
y3
Задает высоту многоточия, используемого для создания округлых углов.
Возвращаемое значение
Ненулевое значение, если операция выполнена успешно; в противном случае — 0.
Замечания
Размер региона ограничен 32 767 на 32 767 логических единиц или 64 КБ памяти, в зависимости от того, что меньше.
После завершения работы приложения с помощью региона, созданного с CreateRoundRectRgn
помощью функции, он должен выбрать регион из контекста устройства и использовать функцию-член CGDIObject::D eleteObject , чтобы удалить ее.
Пример
CRgn rgnA, rgnB, rgnC;
VERIFY(rgnA.CreateRoundRectRgn( 50, 50, 150, 150, 30, 30 ));
VERIFY(rgnB.CreateRoundRectRgn( 200, 75, 250, 125, 50, 50 ));
VERIFY(rgnC.CreateRectRgn( 0, 0, 50, 50 ));
int nCombineResult = rgnC.CombineRgn( &rgnA, &rgnB, RGN_OR );
ASSERT( nCombineResult != ERROR && nCombineResult != NULLREGION );
CBrush brA, brB, brC;
VERIFY(brA.CreateSolidBrush( RGB(255, 0, 0) ));
VERIFY(pDC->FillRgn( &rgnA, &brA)); // rgnA Red Filled
VERIFY(brB.CreateSolidBrush( RGB(0, 255, 0) ));
VERIFY(pDC->FillRgn( &rgnB, &brB)); // rgnB Green Filled
VERIFY(brC.CreateSolidBrush( RGB(0, 0, 255) )); // rgnC Blue
VERIFY(pDC->FrameRgn( &rgnC, &brC, 2, 2 ));
CRgn::CRgn
Формирует объект CRgn
.
CRgn();
Замечания
Элемент m_hObject
данных не содержит допустимый регион GDI Windows, пока объект не инициализирован с помощью одной или нескольких других CRgn
функций-членов.
Пример
См. пример CRgn ::CreateRoundRectRgn.
CRgn::EqualRgn
Определяет, эквивалентен ли данный регион региону, хранящейся в объекте CRgn
.
BOOL EqualRgn(CRgn* pRgn) const;
Параметры
pRgn
Определяет регион.
Возвращаемое значение
Ненулевое значение, если два региона эквивалентны; в противном случае — 0.
Пример
CRgn rgnA, rgnB;
VERIFY(rgnA.CreateEllipticRgn(200, 100, 350, 250));
VERIFY(rgnB.CreateRectRgn(0, 0, 50, 50));
VERIFY(rgnB.CopyRgn(&rgnA));
int nOffsetResult = rgnB.OffsetRgn(-75, 75);
ASSERT(nOffsetResult != ERROR && nOffsetResult != NULLREGION);
ASSERT(FALSE == rgnB.EqualRgn(&rgnA));
CRgn::FromHandle
Возвращает указатель на CRgn
объект при указании дескриптора в регионе Windows.
static CRgn* PASCAL FromHandle(HRGN hRgn);
Параметры
hRgn
Указывает дескриптор в регионе Windows.
Возвращаемое значение
Указатель на объект CRgn
. Если функция не выполнена успешно, возвращаемое значение равно NULL.
Замечания
CRgn
Если объект еще не присоединен к дескрипторуCRgn
, создается и присоединяется временный объект. Этот временный объект действителен только в следующий раз, когда приложение имеет время простоя CRgn
в цикле событий, в то время как все временные графические объекты удаляются. Другой способ сказать, что временный объект действителен только во время обработки одного сообщения окна.
CRgn::GetRegionData
Заполняет указанный буфер данными, описывающими регион.
int GetRegionData(
LPRGNDATA lpRgnData,
int nCount) const;
Параметры
lpRgnData
Указывает на структуру данных RGNDATA , которая получает информацию. Если этот параметр имеет значение NULL, возвращаемое значение содержит количество байтов, необходимых для данных региона.
nCount
Задает размер буфера lpRgnData в байтах.
Возвращаемое значение
Если функция успешно выполнена и nCount указывает достаточное количество байтов, возвращаемое значение всегда равно nCount. Если функция завершается ошибкой, или если nCount указывает меньше достаточного количества байтов, возвращаемое значение равно 0 (ошибка).
Замечания
Эти данные включают измерения прямоугольников, составляющих область. Эта функция используется в сочетании с функцией CRgn::CreateFromData
.
CRgn::GetRgnBox
Извлекает координаты ограничивающего CRgn
прямоугольника объекта.
int GetRgnBox(LPRECT lpRect) const;
Параметры
lpRect
Указывает на RECT
структуру или CRect
объект для получения координат ограничивающего прямоугольника. Структура RECT
имеет следующую форму:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Возвращаемое значение
Указывает тип региона. В качестве такой точки может выступать любой из следующих вариантов:
Регион COMPLEXREGION имеет перекрывающиеся границы.
Область NULLREGION пуста.
Объект ERROR
CRgn
не указывает допустимый регион.Регион SIMPLEREGION не имеет перекрывающихся границ.
Пример
См. пример для CRgn::CreatePolygonRgn.
CRgn::OffsetRgn
Перемещает регион, хранящийся в объекте CRgn
, по указанным смещениям.
int OffsetRgn(
int x,
int y);
int OffsetRgn(POINT point);
Параметры
x
Указывает количество единиц для перемещения влево или вправо.
г
Указывает количество единиц для перемещения вверх или вниз.
point
Координата x точки указывает количество единиц для перемещения влево или вправо. Координата y точки указывает количество единиц для перемещения вверх или вниз. Параметр точки может быть структурой POINT
CPoint
или объектом.
Возвращаемое значение
Тип нового региона. Это может быть любое из следующих значений:
Регион COMPLEXREGION имеет перекрывающиеся границы.
Недопустимый дескриптор региона ERROR.
Область NULLREGION пуста.
Регион SIMPLEREGION не имеет перекрывающихся границ.
Замечания
Функция перемещает единицы x региона вдоль оси x и единиц y вдоль оси y .
Значения координат региона должны быть меньше или равны 32 767 и больше или равно -32 768. Параметры x и y должны быть тщательно выбраны, чтобы предотвратить недопустимые координаты региона.
Пример
См. пример для CRgn::CreateEllipticRgn.
CRgn::operator HRGN
Используйте этот оператор для получения присоединенного дескриптора CRgn
GDI Windows объекта.
operator HRGN() const;
Возвращаемое значение
В случае успешного выполнения дескриптор объекта GDI Windows, представленного CRgn
объектом; в противном случае — ЗНАЧЕНИЕ NULL.
Замечания
Этот оператор является оператором приведения, который поддерживает прямое использование объекта HRGN.
Дополнительные сведения об использовании графических объектов см. в статье "Графические объекты " в пакете SDK для Windows.
CRgn::P tInRegion
Проверяет, находится ли точка, заданная x и y , в регионе, хранящейся в объекте CRgn
.
BOOL PtInRegion(
int x,
int y) const;
BOOL PtInRegion(POINT point) const;
Параметры
x
Задает логическую координату x точки для тестирования.
г
Указывает логическую координату точки для тестирования.
point
Координаты x-и y точки указывают координаты x-и y точки для проверки значения. Параметр точки может быть структурой POINT
CPoint
или объектом.
Возвращаемое значение
Ненулевое значение, если точка находится в регионе; в противном случае — 0.
CRgn::RectInRegion
Определяет, находится ли любая часть прямоугольника, указанная lpRect , находится в границах региона, хранящегося в объекте CRgn
.
BOOL RectInRegion(LPCRECT lpRect) const;
Параметры
lpRect
Указывает на структуру RECT
или CRect
объект. Структура RECT
имеет следующую форму:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Возвращаемое значение
Ненулевое значение, если какая-либо часть указанного прямоугольника находится в границах региона; в противном случае — 0.
CRgn::SetRectRgn
Создает прямоугольную область.
void SetRectRgn(
int x1,
int y1,
int x2,
int y2);
void SetRectRgn(LPCRECT lpRect);
Параметры
x1
Задает координату x левого верхнего угла прямоугольной области.
y1
Задает координату y левого верхнего угла прямоугольной области.
x2
Задает координату x правого нижнего угла прямоугольной области.
y2
Задает координату y правого нижнего угла прямоугольной области.
lpRect
Задает прямоугольную область. Может быть указателем на RECT
структуру или CRect
объект.
Замечания
В отличие от CreateRectRgn, однако он не выделяет дополнительную память из локальной кучи приложений Windows. Вместо этого он использует пространство, выделенное для региона, хранящегося в объекте CRgn
. Это означает, что CRgn
объект уже должен быть инициализирован с допустимым регионом Windows перед вызовом SetRectRgn
. Точки, заданные x1, y1, x2 и y2, указывают минимальный размер выделенного пространства.
Используйте эту функцию вместо CreateRectRgn
функции-члена, чтобы избежать вызовов локального диспетчера памяти.