Класс Кргн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
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
указывает допустимую область.ERRORCRgn
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