Класс КргнCRgn Class

Инкапсулирует область интерфейса графических устройств Windows (GDI).Encapsulates a Windows graphics device interface (GDI) region.

СинтаксисSyntax

class CRgn : public CGdiObject

ЧленыMembers

Открытые конструкторыPublic Constructors

nameName ОписаниеDescription
Кргн:: КргнCRgn::CRgn Формирует объект CRgn.Constructs a CRgn object.

Открытые методыPublic Methods

nameName ОписаниеDescription
Кргн:: КомбинергнCRgn::CombineRgn Задает CRgn объект таким образом, что он эквивалентен объединению двух указанных CRgn объектов.Sets a CRgn object so that it is equivalent to the union of two specified CRgn objects.
Кргн:: КопиргнCRgn::CopyRgn Задает CRgn объект таким образом, чтобы он был копией указанного CRgn объекта.Sets a CRgn object so that it is a copy of a specified CRgn object.
Кргн:: КреатиллиптикргнCRgn::CreateEllipticRgn Инициализирует CRgn объект с помощью эллиптической области.Initializes a CRgn object with an elliptical region.
CRgn::CreateEllipticRgnIndirectCRgn::CreateEllipticRgnIndirect Инициализирует CRgn объект с помощью эллиптической области, определяемой структурой Rect .Initializes a CRgn object with an elliptical region defined by a RECT structure.
Кргн:: КреатефромдатаCRgn::CreateFromData Создает регион из заданной области и данных преобразования.Creates a region from the given region and transformation data.
Кргн:: КреатефромпасCRgn::CreateFromPath Создает регион из пути, выбранного в заданном контексте устройства.Creates a region from the path that is selected into the given device context.
Кргн:: КреатеполигонргнCRgn::CreatePolygonRgn Инициализирует CRgn объект с многоугольной областью.Initializes a CRgn object with a polygonal region. При необходимости система закрывает многоугольник автоматически, рисуя линию из последней вершины в первую.The system closes the polygon automatically, if necessary, by drawing a line from the last vertex to the first.
CRgn::CreatePolyPolygonRgnCRgn::CreatePolyPolygonRgn Инициализирует CRgn объект с областью, состоящей из ряда замкнутых многоугольников.Initializes a CRgn object with a region consisting of a series of closed polygons. Многоугольники могут быть несвязанными, или они могут перекрываться.The polygons may be disjoint, or they may overlap.
Кргн:: КреатеректргнCRgn::CreateRectRgn Инициализирует CRgn объект с прямоугольной областью.Initializes a CRgn object with a rectangular region.
Кргн:: КреатеректргниндиректCRgn::CreateRectRgnIndirect Инициализирует CRgn объект с прямоугольной областью, определенной параметром Rectструктуры.Initializes a CRgn object with a rectangular region defined by a RECTtructure.
Кргн:: КреатераундректргнCRgn::CreateRoundRectRgn Инициализирует CRgn объект с прямоугольной областью с закругленными углами.Initializes a CRgn object with a rectangular region with rounded corners.
Кргн:: ЕкуалргнCRgn::EqualRgn Проверяет два CRgn объекта, чтобы определить, являются ли они эквивалентными.Checks two CRgn objects to determine whether they are equivalent.
Кргн:: FromHandleCRgn::FromHandle Возвращает указатель на CRgn объект при наличии маркера для области Windows.Returns a pointer to a CRgn object when given a handle to a Windows region.
Кргн:: ЖетрегиондатаCRgn::GetRegionData Заполняет указанный буфер данными, описывающими заданный регион.Fills the specified buffer with data describing the given region.
Кргн:: ЖетргнбоксCRgn::GetRgnBox Извлекает координаты ограничивающего прямоугольника CRgn объекта.Retrieves the coordinates of the bounding rectangle of a CRgn object.
Кргн:: ОффсетргнCRgn::OffsetRgn Перемещает CRgn объект по указанным смещениям.Moves a CRgn object by the specified offsets.
Кргн::P ТинрегионCRgn::PtInRegion Определяет, находится ли указанная точка в области.Determines whether a specified point is in the region.
Кргн:: РектинрегионCRgn::RectInRegion Определяет, находится ли какая-либо часть указанного прямоугольника в границах области.Determines whether any part of a specified rectangle is within the boundaries of the region.
Кргн:: СетректргнCRgn::SetRectRgn Задает CRgn объект для указанной прямоугольной области.Sets the CRgn object to the specified rectangular region.

Открытые операторыPublic Operators

ИмяName ОписаниеDescription
Кргн:: operator ХРГНCRgn::operator HRGN Возвращает маркер Windows, содержащийся в CRgn объекте.Returns the Windows handle contained in the CRgn object.

КомментарииRemarks

Регион — это эллиптическая или Многоугольная область внутри окна.A region is an elliptical or polygonal area within a window. Для использования регионов используются функции членов класса CRgn с функциями обрезки, определенными как члены класса CDC .To use regions, you use the member functions of class CRgn with the clipping functions defined as members of class CDC.

Функции элементов CRgn CREATE, ALTER и извлечение сведений о объекте Region, для которого они вызываются.The member functions of CRgn create, alter, and retrieve information about the region object for which they are called.

Дополнительные сведения об использовании см CRgn . в разделе графические объекты.For more information on using CRgn, see Graphic Objects.

Иерархия наследованияInheritance Hierarchy

CObjectCObject

CGdiObjectCGdiObject

CRgn

ТребованияRequirements

Заголовок: afxwin.hHeader: afxwin.h

Кргн:: КомбинергнCRgn::CombineRgn

Создает новый регион GDI, объединяя два существующих региона.Creates a new GDI region by combining two existing regions.

int CombineRgn(
    CRgn* pRgn1,
    CRgn* pRgn2,
    int nCombineMode);

ПараметрыParameters

pRgn1pRgn1
Определяет существующий регион.Identifies an existing region.

pRgn2pRgn2
Определяет существующий регион.Identifies an existing region.

нкомбинемодеnCombineMode
Задает операцию, которая должна быть выполнена при объединении двух исходных областей.Specifies the operation to be performed when combining the two source regions. Это может быть одно из следующих значений:It can be any one of the following values:

  • RGN_AND Использует перекрывающиеся области обоих регионов (пересечения).RGN_AND Uses overlapping areas of both regions (intersection).

  • RGN_COPY создает копию региона 1 (определяется по pRgn1).RGN_COPY Creates a copy of region 1 (identified by pRgn1).

  • RGN_DIFF создает регион, состоящий из областей региона 1 (идентифицируемых pRgn1), которые не являются частью региона 2 (идентифицируемого pRgn2).RGN_DIFF Creates a region consisting of the areas of region 1 (identified by pRgn1) that are not part of region 2 (identified by pRgn2).

  • RGN_OR объединяет оба региона целиком (объединение).RGN_OR Combines both regions in their entirety (union).

  • RGN_XOR объединяет оба региона, но удаляет перекрывающиеся области.RGN_XOR Combines both regions but removes overlapping areas.

Возвращаемое значениеReturn Value

Указывает тип результирующего региона.Specifies the type of the resulting region. Может иметь одно из следующих значений.It can be one of the following values:

  • КОМПЛЕКСРЕГИОН. Новая область содержит перекрывающиеся границы.COMPLEXREGION New region has overlapping borders.

  • Ошибка: новый регион не создан.ERROR No new region created.

  • НУЛЛРЕГИОН новый регион пуст.NULLREGION New region is empty.

  • В новом регионе СИМПЛЕРЕГИОН нет перекрывающихся границ.SIMPLEREGION New region has no overlapping borders.

КомментарииRemarks

Регионы объединяются, как указано в нкомбинемоде.The regions are combined as specified by nCombineMode.

Два указанных региона объединяются, и результирующий маркер области сохраняется в CRgn объекте.The two specified regions are combined, and the resulting region handle is stored in the CRgn object. Таким способом, любой регион, хранящийся в CRgn объекте, заменяется комбинированной областью.Thus, whatever region is stored in the CRgn object is replaced by the combined region.

Размер региона ограничен 32 767 на 32 767 логических устройств или 64 КБ памяти, в зависимости от того, что меньше.The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

Используйте копиргн , чтобы просто скопировать один регион в другой регион.Use CopyRgn to simply copy one region into another region.

ПримерExample

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

Копирует регион, определенный параметром пргнсрк , в CRgn объект.Copies the region defined by pRgnSrc into the CRgn object.

int CopyRgn(CRgn* pRgnSrc);

ПараметрыParameters

пргнсркpRgnSrc
Определяет существующий регион.Identifies an existing region.

Возвращаемое значениеReturn Value

Указывает тип результирующего региона.Specifies the type of the resulting region. Может иметь одно из следующих значений.It can be one of the following values:

  • КОМПЛЕКСРЕГИОН. Новая область содержит перекрывающиеся границы.COMPLEXREGION New region has overlapping borders.

  • Ошибка: новый регион не создан.ERROR No new region created.

  • НУЛЛРЕГИОН новый регион пуст.NULLREGION New region is empty.

  • В новом регионе СИМПЛЕРЕГИОН нет перекрывающихся границ.SIMPLEREGION New region has no overlapping borders.

КомментарииRemarks

Новый регион заменяет регион, который ранее хранился в CRgn объекте.The new region replaces the region formerly stored in the CRgn object. Эта функция является особым случаем функции-члена комбинергн .This function is a special case of the CombineRgn member function.

ПримерExample

См. пример для кргн:: креатиллиптикргн.See the example for CRgn::CreateEllipticRgn.

Кргн:: КреатиллиптикргнCRgn::CreateEllipticRgn

Создает эллиптическую область.Creates an elliptical region.

BOOL CreateEllipticRgn(
    int x1,
    int y1,
    int x2,
    int y2);

ПараметрыParameters

x1x1
Задает логическую координату по оси x верхнего левого угла ограничивающего прямоугольника эллипса.Specifies the logical x-coordinate of the upper-left corner of the bounding rectangle of the ellipse.

Y1y1
Задает логическую координату по оси y верхнего левого угла ограничивающего прямоугольника эллипса.Specifies the logical y-coordinate of the upper-left corner of the bounding rectangle of the ellipse.

штукx2
Задает логическую координату по оси x правого нижнего угла ограничивающего прямоугольника эллипса.Specifies the logical x-coordinate of the lower-right corner of the bounding rectangle of the ellipse.

Y2y2
Задает логическую координату по оси y правого нижнего угла ограничивающего прямоугольника эллипса.Specifies the logical y-coordinate of the lower-right corner of the bounding rectangle of the ellipse.

Возвращаемое значениеReturn Value

Ненулевое значение, если операция завершилась удачно; в противном случае — 0.Nonzero if the operation succeeded; otherwise 0.

КомментарииRemarks

Область определяется ограничивающим прямоугольником, заданным x1, Y1, x2 и Y2.The region is defined by the bounding rectangle specified by x1, y1, x2, and y2. Регион хранится в CRgn объекте.The region is stored in the CRgn object.

Размер региона ограничен 32 767 на 32 767 логических устройств или 64 КБ памяти, в зависимости от того, что меньше.The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

После завершения использования региона, созданного с помощью CreateEllipticRgn функции, приложение должно выбрать регион вне контекста устройства и использовать DeleteObject функцию, чтобы удалить ее.When it has finished using a region created with the CreateEllipticRgn function, an application should select the region out of the device context and use the DeleteObject function to remove it.

ПримерExample

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

Создает эллиптическую область.Creates an elliptical region.

BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);

ПараметрыParameters

лпректlpRect
Указывает на RECT структуру или CRect объект, содержащий логические координаты левого верхнего и правого нижнего угла ограничивающего прямоугольника эллипса.Points to a RECT structure or a CRect object that contains the logical coordinates of the upper-left and lower-right corners of the bounding rectangle of the ellipse.

Возвращаемое значениеReturn Value

Ненулевое значение, если операция завершилась удачно; в противном случае — 0.Nonzero if the operation succeeded; otherwise 0.

КомментарииRemarks

Регион определяется структурой или объектом, на который указывает лпрект , и хранится в CRgn объекте.The region is defined by the structure or object pointed to by lpRect and is stored in the CRgn object.

Размер региона ограничен 32 767 на 32 767 логических устройств или 64 КБ памяти, в зависимости от того, что меньше.The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

После завершения использования региона, созданного с помощью CreateEllipticRgnIndirect функции, приложение должно выбрать регион вне контекста устройства и использовать DeleteObject функцию, чтобы удалить ее.When it has finished using a region created with the CreateEllipticRgnIndirect function, an application should select the region out of the device context and use the DeleteObject function to remove it.

ПримерExample

См. пример для кргн:: креатеректргниндирект.See the example for CRgn::CreateRectRgnIndirect.

Кргн:: КреатефромдатаCRgn::CreateFromData

Создает регион из заданной области и данных преобразования.Creates a region from the given region and transformation data.

BOOL CreateFromData(
    const XFORM* lpXForm,
    int nCount,
    const RGNDATA* pRgnData);

ПараметрыParameters

лпксформlpXForm
Указывает на структуру ATA XForm, которая определяет преобразование, выполняемое в регионе.Points to an XFORMata structure that defines the transformation to be performed on the region. Если этот указатель равен NULL, используется преобразование Identity.If this pointer is NULL, the identity transformation is used.

нкаунтnCount
Указывает число байтов, на которое указывает пргндата.Specifies the number of bytes pointed to by pRgnData.

пргндатаpRgnData
Указывает на структуру данных ргндата , содержащую данные о регионе.Points to a RGNDATA data structure that contains the region data.

Возвращаемое значениеReturn Value

Ненулевое значение, если функция выполнена успешно; в противном случае — 0.Nonzero if the function is successful; otherwise 0.

КомментарииRemarks

Приложение может получать данные для региона путем вызова CRgn::GetRegionData функции.An application can retrieve data for a region by calling the CRgn::GetRegionData function.

Кргн:: КреатефромпасCRgn::CreateFromPath

Создает регион из пути, выбранного в заданном контексте устройства.Creates a region from the path that is selected into the given device context.

BOOL CreateFromPath(CDC* pDC);

ПараметрыParameters

ХозяинpDC
Определяет контекст устройства, который содержит закрытый путь.Identifies a device context that contains a closed path.

Возвращаемое значениеReturn Value

Ненулевое значение, если функция выполнена успешно; в противном случае — 0.Nonzero if the function is successful; otherwise 0.

КомментарииRemarks

Контекст устройства, определяемый параметром PDC , должен содержать закрытый путь.The device context identified by the pDC parameter must contain a closed path. После того как CreateFromPath преобразует путь в область, Windows удаляет закрытый путь из контекста устройства.After CreateFromPath converts a path into a region, Windows discards the closed path from the device context.

Кргн:: КреатеполигонргнCRgn::CreatePolygonRgn

Создает многоугольную область.Creates a polygonal region.

BOOL CreatePolygonRgn(
    LPPOINT lpPoints,
    int nCount,
    int nMode);

ПараметрыParameters

лппоинтсlpPoints
Указывает на массив POINT структур или массив CPoint объектов.Points to an array of POINT structures or an array of CPoint objects. Каждая структура задает координату x и координату y одной вершины многоугольника.Each structure specifies the x-coordinate and y-coordinate of one vertex of the polygon. POINTСтруктура имеет следующий вид:The POINT structure has the following form:

typedef struct tagPOINT {
    int x;
    int y;
} POINT;

нкаунтnCount
Указывает количество POINT структур или CPoint объектов в массиве, на которое указывает лппоинтс.Specifies the number of POINT structures or CPoint objects in the array pointed to by lpPoints.

нмодеnMode
Задает режим заполнения для региона.Specifies the filling mode for the region. Этот параметр может быть либо АЛЬТЕРНАТИВным, либо ОБМОТКой.This parameter may be either ALTERNATE or WINDING.

Возвращаемое значениеReturn Value

Ненулевое значение, если операция завершилась удачно; в противном случае — 0.Nonzero if the operation succeeded; otherwise 0.

КомментарииRemarks

При необходимости система закрывает многоугольник автоматически, рисуя линию из последней вершины в первую.The system closes the polygon automatically, if necessary, by drawing a line from the last vertex to the first. Результирующий регион хранится в CRgn объекте.The resulting region is stored in the CRgn object.

Размер региона ограничен 32 767 на 32 767 логических устройств или 64 КБ памяти, в зависимости от того, что меньше.The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

Если в качестве АЛЬТЕРНАТИВы используется режим заливки многоугольников, система заполняет область между нечетными и четными числами многоугольниками в каждой строке сканирования.When the polygon-filling mode is ALTERNATE, the system fills the area between odd-numbered and even-numbered polygon sides on each scan line. Это значит, что система заполняет область между первой и второй сторон, между третьей и четвертой сторон и т. д.That is, the system fills the area between the first and second side, between the third and fourth side, and so on.

Когда режим заливки многоугольников находится в режиме поворота, система использует направление рисования фигуры, чтобы определить, следует ли заполнить область.When the polygon-filling mode is WINDING, the system uses the direction in which a figure was drawn to determine whether to fill an area. Каждый сегмент линии многоугольника рисуется либо по часовой стрелке, либо в направлении против часовой стрелки.Each line segment in a polygon is drawn in either a clockwise or a counterclockwise direction. Каждый раз, когда мнимая линия, нарисованная из замкнутой области на внешнюю фигуру, проходит через отрезок по часовой стрелке, счетчик увеличивается.Whenever an imaginary line drawn from an enclosed area to the outside of a figure passes through a clockwise line segment, a count is incremented. Если линия проходит через сегмент в виде линии против часовой стрелки, счетчик уменьшается.When the line passes through a counterclockwise line segment, the count is decremented. Область заполняется, если значение счетчика не равно нулю, когда линия попадает за пределы фигуры.The area is filled if the count is nonzero when the line reaches the outside of the figure.

Когда приложение завершило работу с регионом, созданным с помощью CreatePolygonRgn функции, он должен выбрать регион из контекста устройства и использовать функцию, DeleteObject чтобы удалить ее.When an application has finished using a region created with the CreatePolygonRgn function, it should select the region out of the device context and use the DeleteObject function to remove it.

ПримерExample

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

Создает регион, состоящий из ряда замкнутых многоугольников.Creates a region consisting of a series of closed polygons.

BOOL CreatePolyPolygonRgn(
    LPPOINT lpPoints,
    LPINT lpPolyCounts,
    int nCount,
    int nPolyFillMode);

ПараметрыParameters

лппоинтсlpPoints
Указывает на массив POINT структур или массив CPoint объектов, определяющих вершины многоугольников.Points to an array of POINT structures or an array of CPoint objects that defines the vertices of the polygons. Каждый многоугольник должен быть явно закрыт, так как система не закрывает их автоматически.Each polygon must be explicitly closed because the system does not close them automatically. Многоугольники указываются последовательно.The polygons are specified consecutively. POINTСтруктура имеет следующий вид:The POINT structure has the following form:

typedef struct tagPOINT {
    int x;
    int y;
} POINT;

лпполикаунтсlpPolyCounts
Указывает на массив целых чисел.Points to an array of integers. Первое целое число указывает количество вершин в первом многоугольнике в массиве лппоинтс , второе целое число указывает количество вершин во втором многоугольнике и т. д.The first integer specifies the number of vertices in the first polygon in the lpPoints array, the second integer specifies the number of vertices in the second polygon, and so on.

нкаунтnCount
Задает общее число целочисленных значений в массиве лпполикаунтс .Specifies the total number of integers in the lpPolyCounts array.

нполифиллмодеnPolyFillMode
Задает режим заполнения многоугольников.Specifies the polygon-filling mode. Это значение может быть либо АЛЬТЕРНАТИВным, либо ОБМОТКой.This value may be either ALTERNATE or WINDING.

Возвращаемое значениеReturn Value

Ненулевое значение, если операция завершилась удачно; в противном случае — 0.Nonzero if the operation succeeded; otherwise 0.

КомментарииRemarks

Результирующий регион хранится в CRgn объекте.The resulting region is stored in the CRgn object.

Многоугольники могут быть несвязанными, или они могут перекрываться.The polygons may be disjoint, or they may overlap.

Размер региона ограничен 32 767 на 32 767 логических устройств или 64 КБ памяти, в зависимости от того, что меньше.The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

Если в качестве АЛЬТЕРНАТИВы используется режим заливки многоугольников, система заполняет область между нечетными и четными числами многоугольниками в каждой строке сканирования.When the polygon-filling mode is ALTERNATE, the system fills the area between odd-numbered and even-numbered polygon sides on each scan line. Это значит, что система заполняет область между первой и второй сторон, между третьей и четвертой сторон и т. д.That is, the system fills the area between the first and second side, between the third and fourth side, and so on.

Когда режим заливки многоугольников находится в режиме поворота, система использует направление рисования фигуры, чтобы определить, следует ли заполнить область.When the polygon-filling mode is WINDING, the system uses the direction in which a figure was drawn to determine whether to fill an area. Каждый сегмент линии многоугольника рисуется либо по часовой стрелке, либо в направлении против часовой стрелки.Each line segment in a polygon is drawn in either a clockwise or a counterclockwise direction. Каждый раз, когда мнимая линия, нарисованная из замкнутой области на внешнюю фигуру, проходит через отрезок по часовой стрелке, счетчик увеличивается.Whenever an imaginary line drawn from an enclosed area to the outside of a figure passes through a clockwise line segment, a count is incremented. Если линия проходит через сегмент в виде линии против часовой стрелки, счетчик уменьшается.When the line passes through a counterclockwise line segment, the count is decremented. Область заполняется, если значение счетчика не равно нулю, когда линия попадает за пределы фигуры.The area is filled if the count is nonzero when the line reaches the outside of the figure.

Когда приложение завершило работу с регионом, созданным с помощью CreatePolyPolygonRgn функции, он должен выбрать регион из контекста устройства и использовать функцию-член кгдиобжект::D елетеобжект , чтобы удалить ее.When an application has finished using a region created with the CreatePolyPolygonRgn function, it should select the region out of the device context and use the CGDIObject::DeleteObject member function to remove it.

Кргн:: КреатеректргнCRgn::CreateRectRgn

Создает прямоугольную область, которая хранится в CRgn объекте.Creates a rectangular region that is stored in the CRgn object.

BOOL CreateRectRgn(
    int x1,
    int y1,
    int x2,
    int y2);

ПараметрыParameters

x1x1
Задает логическую координату по оси x верхнего левого угла области.Specifies the logical x-coordinate of the upper-left corner of the region.

Y1y1
Задает логическую координату по оси y верхнего левого угла области.Specifies the logical y-coordinate of the upper-left corner of the region.

штукx2
Задает логическую координату по оси x правого нижнего угла области.Specifies the logical x-coordinate of the lower-right corner of the region.

Y2y2
Задает логическую координату по оси y правого нижнего угла области.Specifies the logical y-coordinate of the lower-right corner of the region.

Возвращаемое значениеReturn Value

Ненулевое значение, если операция завершилась удачно; в противном случае — 0.Nonzero if the operation succeeded; otherwise 0.

КомментарииRemarks

Размер региона ограничен 32 767 на 32 767 логических устройств или 64 КБ памяти, в зависимости от того, что меньше.The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

После завершения использования региона, созданного CreateRectRgn , приложение должно использовать функцию-член кгдиобжект::D елетеобжект для удаления региона.When it has finished using a region created by CreateRectRgn, an application should use the CGDIObject::DeleteObject member function to remove the region.

ПримерExample

CRgn   rgn;

BOOL bSucceeded = rgn.CreateRectRgn( 50, 20, 150, 120 );
ASSERT( bSucceeded == TRUE );

Дополнительные примеры см. в разделе кргн:: комбинергн.For an additional example, see CRgn::CombineRgn.

Кргн:: КреатеректргниндиректCRgn::CreateRectRgnIndirect

Создает прямоугольную область, которая хранится в CRgn объекте.Creates a rectangular region that is stored in the CRgn object.

BOOL CreateRectRgnIndirect(LPCRECT lpRect);

ПараметрыParameters

лпректlpRect
Указывает на RECT структуру или CRect объект, который содержит логические координаты левого верхнего и правого нижнего угла области.Points to a RECT structure or CRect object that contains the logical coordinates of the upper-left and lower-right corners of the region. RECTСтруктура имеет следующий вид:The RECT structure has the following form:

typedef struct tagRECT {
    int left;
    int top;
    int right;
    int bottom;
} RECT;

Возвращаемое значениеReturn Value

Ненулевое значение, если операция завершилась удачно; в противном случае — 0.Nonzero if the operation succeeded; otherwise 0.

КомментарииRemarks

Размер региона ограничен 32 767 на 32 767 логических устройств или 64 КБ памяти, в зависимости от того, что меньше.The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

После завершения использования региона, созданного CreateRectRgnIndirect , приложение должно использовать функцию-член кгдиобжект::D елетеобжект для удаления региона.When it has finished using a region created by CreateRectRgnIndirect, an application should use the CGDIObject::DeleteObject member function to remove the region.

ПримерExample

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 объекте.Creates a rectangular region with rounded corners that is stored in the CRgn object.

BOOL CreateRoundRectRgn(
    int x1,
    int y1,
    int x2,
    int y2,
    int x3,
    int y3);

ПараметрыParameters

x1x1
Задает логическую координату по оси x верхнего левого угла области.Specifies the logical x-coordinate of the upper-left corner of the region.

Y1y1
Задает логическую координату по оси y верхнего левого угла области.Specifies the logical y-coordinate of the upper-left corner of the region.

штукx2
Задает логическую координату по оси x правого нижнего угла области.Specifies the logical x-coordinate of the lower-right corner of the region.

Y2y2
Задает логическую координату по оси y правого нижнего угла области.Specifies the logical y-coordinate of the lower-right corner of the region.

x3x3
Задает ширину эллипса, используемого для создания скругленных углов.Specifies the width of the ellipse used to create the rounded corners.

Y3y3
Задает высоту эллипса, используемого для создания скругленных углов.Specifies the height of the ellipse used to create the rounded corners.

Возвращаемое значениеReturn Value

Ненулевое значение, если операция завершилась удачно; в противном случае — 0.Nonzero if the operation succeeded; otherwise 0.

КомментарииRemarks

Размер региона ограничен 32 767 на 32 767 логических устройств или 64 КБ памяти, в зависимости от того, что меньше.The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

Когда приложение завершило работу с регионом, созданным с помощью CreateRoundRectRgn функции, он должен выбрать регион из контекста устройства и использовать функцию-член кгдиобжект::D елетеобжект , чтобы удалить ее.When an application has finished using a region created with the CreateRoundRectRgn function, it should select the region out of the device context and use the CGDIObject::DeleteObject member function to remove it.

ПримерExample

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.Constructs a CRgn object.

CRgn();

КомментарииRemarks

m_hObjectЭлемент данных не содержит допустимого региона Windows GDI, пока объект не будет инициализирован с помощью одной или нескольких других CRgn функций-членов.The m_hObject data member does not contain a valid Windows GDI region until the object is initialized with one or more of the other CRgn member functions.

ПримерExample

См. пример для кргн:: креатераундректргн.See the example for CRgn::CreateRoundRectRgn.

Кргн:: ЕкуалргнCRgn::EqualRgn

Определяет, эквивалентен ли заданный регион области, хранящейся в CRgn объекте.Determines whether the given region is equivalent to the region stored in the CRgn object.

BOOL EqualRgn(CRgn* pRgn) const;

ПараметрыParameters

пргнpRgn
Определяет регион.Identifies a region.

Возвращаемое значениеReturn Value

Ненулевое значение, если два региона эквивалентны; в противном случае — 0.Nonzero if the two regions are equivalent; otherwise 0.

ПримерExample

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 ) );

Кргн:: FromHandleCRgn::FromHandle

Возвращает указатель на CRgn объект при наличии маркера для области Windows.Returns a pointer to a CRgn object when given a handle to a Windows region.

static CRgn* PASCAL FromHandle(HRGN hRgn);

ПараметрыParameters

хргнhRgn
Задает маркер для области Windows.Specifies a handle to a Windows region.

Возвращаемое значениеReturn Value

Указатель на объект CRgn.A pointer to a CRgn object. Если функция не была выполнена успешно, возвращается значение NULL.If the function was not successful, the return value is NULL.

КомментарииRemarks

Если CRgn объект еще не присоединен к обработчику, CRgn создается и прикрепляется временный объект.If a CRgn object is not already attached to the handle, a temporary CRgn object is created and attached. Этот временный CRgn объект действителен только до тех пор, пока приложение не найдет время простоя в цикле событий, во время которого все временные графические объекты будут удалены.This temporary CRgn object is valid only until the next time the application has idle time in its event loop, at which time all temporary graphic objects are deleted. Другой способ сказать, что временный объект допустим только во время обработки одного сообщения окна.Another way of saying this is that the temporary object is only valid during the processing of one window message.

Кргн:: ЖетрегиондатаCRgn::GetRegionData

Заполняет указанный буфер данными, описывающими регион.Fills the specified buffer with data describing the region.

int GetRegionData(
    LPRGNDATA lpRgnData,
    int nCount) const;

ПараметрыParameters

лпргндатаlpRgnData
Указывает на структуру данных ргндата , которая получает информацию.Points to a RGNDATA data structure that receives the information. Если этот параметр имеет значение NULL, возвращаемое значение содержит число байтов, необходимых для данных региона.If this parameter is NULL, the return value contains the number of bytes needed for the region data.

нкаунтnCount
Задает размер (в байтах) буфера лпргндата .Specifies the size, in bytes, of the lpRgnData buffer.

Возвращаемое значениеReturn Value

Если функция выполнена удачно и нкаунт указывает достаточное число байтов, возвращаемое значение всегда равно нкаунт.If the function succeeds and nCount specifies an adequate number of bytes, the return value is always nCount. Если функция завершается с ошибкой или если нкаунт указывает меньшее количество байтов, возвращается значение 0 (ошибка).If the function fails, or if nCount specifies less than adequate number of bytes, the return value is 0 (error).

КомментарииRemarks

Эти данные включают размеры прямоугольников, составляющих регион.This data includes the dimensions of the rectangles that make up the region. Эта функция используется в сочетании с CRgn::CreateFromData функцией.This function is used in conjunction with the CRgn::CreateFromData function.

Кргн:: ЖетргнбоксCRgn::GetRgnBox

Извлекает координаты ограничивающего прямоугольника CRgn объекта.Retrieves the coordinates of the bounding rectangle of the CRgn object.

int GetRgnBox(LPRECT lpRect) const;

ПараметрыParameters

лпректlpRect
Указывает на RECT структуру или CRect объект для получения координат ограничивающего прямоугольника.Points to a RECT structure or CRect object to receive the coordinates of the bounding rectangle. RECTСтруктура имеет следующий вид:The RECT structure has the following form:

typedef struct tagRECT {

int left;

int top;

int right;

int bottom;

} RECT;

Возвращаемое значениеReturn Value

Задает тип области.Specifies the region's type. В качестве такой точки может выступать любой из следующих вариантов:It can be any of the following values:

  • КОМПЛЕКСРЕГИОН региона содержит перекрывающиеся границы.COMPLEXREGION Region has overlapping borders.

  • НУЛЛРЕГИОН регион пуст.NULLREGION Region is empty.

  • Объект ERROR не CRgn указывает допустимую область.ERROR CRgn object does not specify a valid region.

  • У региона СИМПЛЕРЕГИОН нет перекрывающихся границ.SIMPLEREGION Region has no overlapping borders.

ПримерExample

См. пример для кргн:: креатеполигонргн.See the example for CRgn::CreatePolygonRgn.

Кргн:: ОффсетргнCRgn::OffsetRgn

Перемещает область, хранящуюся в CRgn объекте, по заданному смещению.Moves the region stored in the CRgn object by the specified offsets.

int OffsetRgn(
    int x,
    int y);

int OffsetRgn(POINT point);

ПараметрыParameters

xx
Указывает число единиц, которые должны быть перемещены влево или вправо.Specifies the number of units to move left or right.

yy
Указывает число единиц, которое необходимо переместить вверх или вниз.Specifies the number of units to move up or down.

точкиpoint
Координата x точки указывает число единиц, которые должны быть перемещены влево или вправо.The x-coordinate of point specifies the number of units to move left or right. Координата y точки указывает число единиц, которое нужно переместить вверх или вниз.The y-coordinate of point specifies the number of units to move up or down. Параметр точки может быть либо POINT структурой, либо CPoint объектом.The point parameter may be either a POINT structure or a CPoint object.

Возвращаемое значениеReturn Value

Тип нового региона.The new region's type. Это может быть одно из следующих значений:It can be any one of the following values:

  • КОМПЛЕКСРЕГИОН региона содержит перекрывающиеся границы.COMPLEXREGION Region has overlapping borders.

  • Недопустимый маркер области ошибок.ERROR Region handle is not valid.

  • НУЛЛРЕГИОН регион пуст.NULLREGION Region is empty.

  • У региона СИМПЛЕРЕГИОН нет перекрывающихся границ.SIMPLEREGION Region has no overlapping borders.

КомментарииRemarks

Функция перемещает единицы измерения x вдоль осей x и y вдоль оси y.The function moves the region x units along the x-axis and y units along the y-axis.

Значения координат региона должны быть меньше или равными 32 767 и больше или равны-32 768.The coordinate values of a region must be less than or equal to 32,767 and greater than or equal to -32,768. Для предотвращения недопустимых координат региона необходимо тщательно выбрать параметры x и y .The x and y parameters must be carefully chosen to prevent invalid region coordinates.

ПримерExample

См. пример для кргн:: креатиллиптикргн.See the example for CRgn::CreateEllipticRgn.

Кргн:: operator ХРГНCRgn::operator HRGN

Этот оператор используется для получения подключенного маркера GDI Windows CRgn объекта.Use this operator to get the attached Windows GDI handle of the CRgn object.

operator HRGN() const;

Возвращаемое значениеReturn Value

В случае успеха — обработчик для объекта Windows GDI, представленного CRgn объектом; в противном случае — null.If successful, a handle to the Windows GDI object represented by the CRgn object; otherwise NULL.

КомментарииRemarks

Этот оператор является оператором приведения, который поддерживает прямое использование объекта ХРГН.This operator is a casting operator, which supports direct use of an HRGN object.

Дополнительные сведения об использовании графических объектов см. в разделе графические объекты статьи Windows SDK.For more information about using graphic objects, see the article Graphic Objects in the Windows SDK.

Кргн::P ТинрегионCRgn::PtInRegion

Проверяет, находится ли точка, заданная x и y , в области, хранящейся в CRgn объекте.Checks whether the point given by x and y is in the region stored in the CRgn object.

BOOL PtInRegion(
    int x,
    int y) const;

BOOL PtInRegion(POINT point) const;

ПараметрыParameters

xx
Задает логическую координату x проверяемой точки.Specifies the logical x-coordinate of the point to test.

yy
Задает логическую координату y проверяемой точки.Specifies the logical y-coordinate of the point to test.

точкиpoint
Координаты x и y точки определяют координаты x и y точки, для которой нужно проверить значение.The x- and y-coordinates of point specify the x- and y-coordinates of the point to test the value of. Параметр точки может быть либо POINT структурой, либо CPoint объектом.The point parameter can either be a POINT structure or a CPoint object.

Возвращаемое значениеReturn Value

Ненулевое значение, если точка находится в регионе; в противном случае — 0.Nonzero if the point is in the region; otherwise 0.

Кргн:: РектинрегионCRgn::RectInRegion

Определяет, находится ли любая часть прямоугольника, заданная параметром лпрект , в границах области, хранящейся в CRgn объекте.Determines whether any part of the rectangle specified by lpRect is within the boundaries of the region stored in the CRgn object.

BOOL RectInRegion(LPCRECT lpRect) const;

ПараметрыParameters

лпректlpRect
Указывает на RECT структуру или CRect объект.Points to a RECT structure or CRect object. RECTСтруктура имеет следующий вид:The RECT structure has the following form:

typedef struct tagRECT {
    int left;
    int top;
    int right;
    int bottom;
} RECT;

Возвращаемое значениеReturn Value

Ненулевое значение, если любая часть указанного прямоугольника находится в границах области. в противном случае — 0.Nonzero if any part of the specified rectangle lies within the boundaries of the region; otherwise 0.

Кргн:: СетректргнCRgn::SetRectRgn

Создает прямоугольную область.Creates a rectangular region.

void SetRectRgn(
    int x1,
    int y1,
    int x2,
    int y2);

void SetRectRgn(LPCRECT lpRect);

ПараметрыParameters

x1x1
Задает координату по оси x верхнего левого угла прямоугольной области.Specifies the x-coordinate of the upper-left corner of the rectangular region.

Y1y1
Задает координату по оси y верхнего левого угла прямоугольной области.Specifies the y-coordinate of the upper-left corner of the rectangular region.

штукx2
Задает координату по оси x правого нижнего угла прямоугольной области.Specifies the x-coordinate of the lower-right corner of the rectangular region.

Y2y2
Задает координату по оси y правого нижнего угла прямоугольной области.Specifies the y-coordinate of the lower-right corner of the rectangular region.

лпректlpRect
Задает прямоугольную область.Specifies the rectangular region. Может быть либо указателем на RECT структуру, либо CRect объектом.Can be either a pointer to a RECT structure or a CRect object.

КомментарииRemarks

Однако в отличие от креатеректргн, она не выделяет дополнительную память из локальной кучи приложений Windows.Unlike CreateRectRgn, however, it does not allocate any additional memory from the local Windows application heap. Вместо этого используется пространство, выделенное для региона, хранящегося в CRgn объекте.Instead, it uses the space allocated for the region stored in the CRgn object. Это означает, что CRgn перед вызовом объект должен быть уже инициализирован с помощью допустимой области Windows SetRectRgn .This means that the CRgn object must already have been initialized with a valid Windows region before calling SetRectRgn. Точки, заданные x1, Y1, x2 и Y2 , задают минимальный размер выделенного пространства.The points given by x1, y1, x2, and y2 specify the minimum size of the allocated space.

Используйте эту функцию вместо CreateRectRgn функции члена, чтобы избежать вызовов диспетчера локальной памяти.Use this function instead of the CreateRectRgn member function to avoid calls to the local memory manager.

См. также разделSee also

CWnd, классCWnd Class
Иерархическая диаграммаHierarchy Chart