Все криволинейные функции, а в их состав мы отнесем Arc (), Ellipse () Pie (), используют понятие базового прямоугольника. Базовый прямоугольник ограничивается координатами верхнего левого (UpX, UpY) и нижнего правого (LowX, LowY) углов. Внутри базового прямогутника помещается вписан эллипс, который и является основой для построения криволинейных объектов. Прежде всего такое состояние объектов используется функцией Ellipse ():
BOOL CDC :: Ellipse (int UpX, int UpY, int LowX, int LowY);
BOOL CDC :: Ellipse (LPCRECT lpRect);
Здесь UpX, UpY, LowX, LowY - уже приведены координаты углов прямоугольника, в который вписывается эллипс. Эллипс изображается с помощью текущего пера и заполняется в стиле текущего кисти.
Функция Arc () обеспечивает построение дуги, которая строится на основе базового прямогутника. Дуга является элементом эллипса, вписанного в базовый прямоугольника. Конечные точки дуги ограничиваются двумя лучами, исходящими из центра эллипса.
BOOL CDC :: Arc (int UpX, int UpY, int LowX, int LowY,
int StartX, int StartY, int EndX, int EndY);
BOOL CDC :: Arc (LPCRECT lpRect, POINT ptStart, POINT ptEnd);
Здесь, как и ранее, UpX, UpY, LowX, LowY - координаты углов базового прямоугольника; StartX, StartY - точка направления первого ограничивающего луча, EndX, EndY - точка направления второго ограничивающего луча.
Во втором варианте lpRect содержит весь прямоугольник, а точки ptStart и ptEnd - точки направлений первого и второго ограничивающих лучей.
Следующая функция - Pie (). С ее помощью строится сектор, буду ется на основе ограничивающего прямоугольника и является частью эллипса, вписанного в прямоугольник. Сектор формируется дугой - элементом эллипса и и отрезками двух ограничивающих лучей, проведенных из центра эллипса. Внутренняя часть сектора зоповнюеться соответствии со стилем текущего кисти.
BOOL CDC :: Pie (int UpX, int UpY, int LowX, int LowY,
int StartX, int StartY, int EndX, int EndY);
BOOL CDC :: Pie (LPCRECT lpRect, POINT ptStart, POINT ptEnd);
Параметры функции Pie () - такие же, как и в функции Arc (). Обработчик с построением эллипса, дуги и сектора приведены в примере 4.15.
Обработчик с построением эллипса, дуги и сектора
void CMainWin :: OnEllipse ()
[CRect a (50,50,150,200);
CPen bluePen (PS_DASH, 1, RGB (0,0,255));
CBrush lblueBrush (RGB (0,255,255));
memDC.SelectObject (& bluePen);
memDC.SelectObject (& lblueBrush);
memDC.Ellipse (& a); // Эллипс
CRect b (200,50,300,200);
CPen mPen (PS_SOLID, 4, RGB (0,0,255));
memDC.SelectObject (& mPen);
CPoint p1 (250,300), p2 (150,200);
memDC.Arc (& b, p2, p1); // Дуга
CRect c (300,50,400,200);
memDC.Pie (& c, p2, p1); // Сектор
InvalidateRect (NULL);]