Drop Down MenusCSS Drop Down MenuPure CSS Dropdown Menu -->

Меню

Як програмно намалювати коло, розбите на сектори

Привіт, дорогі читачі, сьогодні ми спробуємо намалювати коло (програмно), розбите на сектори. Для того, щоб намалювати сектор, ми повинні зрозуміти, що таке метод Pie. 

Метод 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);

Джерела:

Комментариев нет:

Отправить комментарий

Root