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


CRgn::CreatePolygonRgn

Создает полигональная область.

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

Параметры

  • lpPoints
    Указывает на массив структур POINT или массив объектов CPoint.Каждая структура задает координату х и координату y одной вершины многоугольника.Структура POINT имеет следующую форму:

    typedef struct tagPOINT {

    int x;

    int y;

    } POINT;

  • nCount
    Указывает количество структур POINT или CPoint возражает в массиве, указанному в lpPoints.

  • nMode
    Определяет заполнение режима для области.Этот параметр может быть ALTERNATE или WINDING.

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

Ненулевой, если операция завершилась успешно; в противном случае – значение 0.

Заметки

Система автоматически закрывает многоугольник, если необходимый, чтобы нарисовать линию с последней вершины к первому.Результирующая область хранится в объекте CRgn.

Размер области ограничен 32.767 32.767 логическими модулями или 64K памяти, какая из этих величин меньше.

При многоугольник- заливка режим ALTERNATE система заливает область между нечетн- пронумерованными и ровн- пронумерованными сторонами многоугольника на каждой линии просмотра.Иными словами, система заливает область между первой и второй стороной между третьей и четвертой стороной и т д

При многоугольник- заливка режим WINDING система использует направление диаграммы, чтобы определить, была ли нарисована заполнить область.Каждый сегмент линии в многоугольнике рисование в или по часовой стрелке или направлении против часовых стрелок.При выписанная мнимая линия из внешней области диаграммы заключенный в проходит через сегмента линий по часовой стрелке, count увеличивается.Если линия проходит через counterclockwise сегмента линий число уменьшается.Область, заполняемую если количество не равен нулю, то при достижении пределами линии диаграммы.

Когда приложение завершила использование область, созданную с помощью функции 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 );

Требования

Header: afxwin.h

См. также

Ссылки

Класс CRgn

Диаграмма иерархии

CRgn::CreatePolyPolygonRgn

CreatePolygonRgn