Привіт, дорогі читачі, сьогодні ми спробуємо намалювати коло
(програмно), розбите на сектори. Для того, щоб намалювати сектор, ми повинні
зрозуміти, що таке метод Pie.
Метод Pie малює замкнуту фігуру - сектор кола або еліпса за допомогою поточних параметрів пера Реn. Фігура заповнюється поточним значенням Brush. Точки (X1, Y1) і (Х2, Y2) визначають прямокутник, що описує еліпс. Початкова точка дуги визначається перетином еліпса з прямою, що проходить через його центр і точку (ХЗ, Y3). Кінцева точка дуги визначається перетином еліпса з прямою, що проходить через його центр і точку (Х4, Y4). Дуга малюється проти годинникової стрілки від початкової до кінцевої точки. Малюються прямі, що обмежують сегмент і проходять через центр еліпса і точки (ХЗ, Y3) і (Х4, Y4).
Метод Pie малює замкнуту фігуру - сектор кола або еліпса за допомогою поточних параметрів пера Реn. Фігура заповнюється поточним значенням Brush. Точки (X1, Y1) і (Х2, Y2) визначають прямокутник, що описує еліпс. Початкова точка дуги визначається перетином еліпса з прямою, що проходить через його центр і точку (ХЗ, Y3). Кінцева точка дуги визначається перетином еліпса з прямою, що проходить через його центр і точку (Х4, Y4). Дуга малюється проти годинникової стрілки від початкової до кінцевої точки. Малюються прямі, що обмежують сегмент і проходять через центр еліпса і точки (ХЗ, Y3) і (Х4, Y4).
У Windows 95/98 суми X1 + Х2, Y1 + Y2 і X1 + Х2 + Y1 + Y2 не
повинні перевищувати 32768.
У Windows NT напрямок малювання дуги можна змінити на напрям
за годинниковою стрілкою викликом функції SetArcDirection.
Ось, що у нас повинно вийти.
Ось, що у нас повинно вийти.
З
початку намалюємо коло (з білим контуром) і зробимо фон білим.
HPEN hPenOxy, hOldPen; //- включити перо малювання
int x1, x2, x3, x4, y1, y2, y3, y4;
CClientDC dc(this);
GetClientRect(&rc);
dc.FillSolidRect(&rc,
0x00FFFFFF);
hPenOxy = CreatePen(PS_SOLID, 3, 0x00FFFFFF);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
x1 = rc.left + 170;
y1 = rc.top + 10;
x2 = rc.right - 170;
y2 = rc.bottom - 10;
// визначити колір малювання
об'єкта
m =
CreateSolidBrush(0x0000BBFF);
oldm = (HBRUSH)dc.SelectObject(m);
dc.Ellipse(x1, y1, x2,
y2);
SelectObject(dc,
hOldPen);
DeleteObject(hPenOxy);
DeleteObject(m);
SelectObject(dc, oldm);
А
зараз намалюємо сектор за допомогою раніше підібраних координат.
// визначити колір малювання
об'єкта
m =
CreateSolidBrush(0x00E16941);
oldm = (HBRUSH)dc.SelectObject(m);
x3 = x2;
y3 = (y1 + y2) / 2 +
20;
x4 = (x1 + x2) / 2;
y4 = y1;
dc.Pie(x1, y1, x2, y2, x3,
y3, x4, y4);
Нам
треба намалювати ще два сектора. Давайте з копіюємо код і по змінюємо
координати.
// визначити колір малювання
об'єкта
m =
CreateSolidBrush(0x002E67F3);
oldm = (HBRUSH)dc.SelectObject(m);
x3 = x2 - 50;
y3 = y2;
x4 = x2;
y4 = (y1 + y2) / 2 +
20;
dc.Pie(x1, y1, x2, y2, x3,
y3, x4, y4);
Залишився
тільки один сектор.
// визначити колір малювання
об'єкта
m =
CreateSolidBrush(0x00C4A69A);
oldm = (HBRUSH)dc.SelectObject(m);
x3 = x1;
y3 = y2 - 50;
x4 = x2 - 50;
y4 = y2;
dc.Pie(x1, y1, x2, y2, x3,
y3, x4, y4);
Джерела:
Комментариев нет:
Отправить комментарий