Як йшлося у статті де описувалося як зробити програму "Кругова діаграма" ми спробуємо зробити вже 8 сегментів... Ну що ж почнемо!!!
Ми візьмемо як шаблон на программу це архів програми "Кольорова гістограма", який можна завантажити на сайті miwzua.com
Після завантаження заходимо в програму та компілюємо проект
Потім через Solution Explorer заходимо в ProgramDlg.h шукаємо розділ public: та після void diagramm(); пишемо void krdiagramm();
Перейдемо у ProgramDlg.cpp та після коду
Вставимо ось цей код
Все готово!!!!
Щоб перевірити працездатність натисніть декілька раз на діаграму
Дякую за увагу!!!
Ми візьмемо як шаблон на программу це архів програми "Кольорова гістограма", який можна завантажити на сайті miwzua.com
Після завантаження заходимо в програму та компілюємо проект
Перейдемо у ProgramDlg.cpp та після коду
void CProgramDlg::diagramm()
{
// рисуем на планшете
CClientDC dc(this);
GetClientRect(&rc);
// ширина и высота в равных частях
dx = abs(rc.right - rc.left) / 7;
dy = abs(rc.bottom - rc.top) / 7;
// формируем разноцветье для прямоугольников
for (k = 0; k < 7; k++)
{
cx = rand() % 255;
cy = rand() % 255;
cz = rand() % 255;
c[k] = RGB(cx, cy, cz);
}
// перекрашиваем область в белое
cf = ck = RGB(255, 255, 255);
dc.Rectangle(&rc);
// прорисовываем прямоугольники разного цвета
for (k = 0; k < 6; k++)
{
// крайние только белого света
if ((k > 0) && (k < 6))
{
cf = ck = c[k];
ck = RGB(255, 255, 255);
}
// устанвливаем цвет пера и кисточки
hPenOxy = CreatePen(PS_SOLID, 24, ck);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
m = CreateSolidBrush(cf);
oldm = (HBRUSH)dc.SelectObject(m);
// размеры очередного прямоугольника
x1 = rc.left + k*dx;
y1 = rc.top + (rand() % 6 + 1)*dy - rand() % dy;
x2 = rc.left + (k + 1)*dx;
y2 = rc.bottom - dy + 50;
// рисуем прямоугольник
if ((k > 0) && (k < 6)) dc.Rectangle(x1, y1, x2, y2);
}
// восстанавливаем цвета
DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
}
{
// рисуем на планшете
CClientDC dc(this);
GetClientRect(&rc);
// ширина и высота в равных частях
dx = abs(rc.right - rc.left) / 7;
dy = abs(rc.bottom - rc.top) / 7;
// формируем разноцветье для прямоугольников
for (k = 0; k < 7; k++)
{
cx = rand() % 255;
cy = rand() % 255;
cz = rand() % 255;
c[k] = RGB(cx, cy, cz);
}
// перекрашиваем область в белое
cf = ck = RGB(255, 255, 255);
dc.Rectangle(&rc);
// прорисовываем прямоугольники разного цвета
for (k = 0; k < 6; k++)
{
// крайние только белого света
if ((k > 0) && (k < 6))
{
cf = ck = c[k];
ck = RGB(255, 255, 255);
}
// устанвливаем цвет пера и кисточки
hPenOxy = CreatePen(PS_SOLID, 24, ck);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
m = CreateSolidBrush(cf);
oldm = (HBRUSH)dc.SelectObject(m);
// размеры очередного прямоугольника
x1 = rc.left + k*dx;
y1 = rc.top + (rand() % 6 + 1)*dy - rand() % dy;
x2 = rc.left + (k + 1)*dx;
y2 = rc.bottom - dy + 50;
// рисуем прямоугольник
if ((k > 0) && (k < 6)) dc.Rectangle(x1, y1, x2, y2);
}
// восстанавливаем цвета
DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
}
void CProgramDlg::krdiagramm()
{
// формируем разноцветье для прямоугольников
for (k = 0; k < 7; k++)
{
cx = rand() % 255;
cy = rand() % 255;
cz = rand() % 255;
c[k] = RGB(cx, cy, cz);
}
// рисуем на планшете
CClientDC dc(this);
GetClientRect(&rc);
//вычисляем координаты круга
x = x1 = rc.left + 200;
y = y1 = rc.top + 50;
dx = x2 = rc.right - 200;
dy = y2 = rc.bottom - 40;
cx = (x + dx) / 2;
cy = (y + dy) / 2;
// перекрашиваем область в белое
cf = ck = RGB(255, 255, 255);
dc.Rectangle(&rc);
// устанвливаем цвет пера и кисточки
hPenOxy = CreatePen(PS_SOLID, 6, ck);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
m = CreateSolidBrush(c[0]);
oldm = (HBRUSH)dc.SelectObject(m);
dc.Ellipse(x1,y1,x2,y2);
m = CreateSolidBrush(c[1]);
oldm = (HBRUSH)dc.SelectObject(m);
do
{
x3 = x + rand() % abs(cx - x);
x4 = x + rand() % abs(cx - x);
} while (x3 < x4);
do
{
y3 = y + rand() % abs(cy - y);
y4 = y + rand() % abs(cy - y);
} while (y3 > y4);
dc.Pie(x1, y1, x2, y2, x3, y3, x4, y4);
m = CreateSolidBrush(c[2]);
oldm = (HBRUSH)dc.SelectObject(m);
do
{
x3 = cx + rand() % abs(cx - dx);
x4 = cx + rand() % abs(cx - dx);
} while (x3 < x4);
do
{
y3 = y + rand() % abs(cy - y);
y4 = y + rand() % abs(cy - y);
} while (y3 < y4);
dc.Pie(x1, y1, x2, y2, x3, y3, x4, y4);
m = CreateSolidBrush(c[3]);
oldm = (HBRUSH)dc.SelectObject(m);
do
{
x3 = x + rand() % abs(cx - x);
x4 = x + rand() % abs(cx - x);
} while (x3 > x4);
do
{
y3 = cy + rand() % abs(cy - dy);
y4 = cy + rand() % abs(cy - dy);
} while (y3 > y4);
dc.Pie(x1, y1, x2, y2, x3, y3, x4, y4);
m = CreateSolidBrush(c[4]);
oldm = (HBRUSH)dc.SelectObject(m);
do
{
x3 = cx + rand() % abs(cx - dx);
x4 = cx + rand() % abs(cx - dx);
} while (x3 > x4);
do
{
y3 = cy + rand() % abs(cy - dy);
y4 = cy + rand() % abs(cy - dy);
} while (y3 < y4);
dc.Pie(x1, y1, x2, y2, x3, y3, x4, y4);
// восстанавливаем цвета
DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
}
{
// формируем разноцветье для прямоугольников
for (k = 0; k < 7; k++)
{
cx = rand() % 255;
cy = rand() % 255;
cz = rand() % 255;
c[k] = RGB(cx, cy, cz);
}
// рисуем на планшете
CClientDC dc(this);
GetClientRect(&rc);
//вычисляем координаты круга
x = x1 = rc.left + 200;
y = y1 = rc.top + 50;
dx = x2 = rc.right - 200;
dy = y2 = rc.bottom - 40;
cx = (x + dx) / 2;
cy = (y + dy) / 2;
// перекрашиваем область в белое
cf = ck = RGB(255, 255, 255);
dc.Rectangle(&rc);
// устанвливаем цвет пера и кисточки
hPenOxy = CreatePen(PS_SOLID, 6, ck);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
m = CreateSolidBrush(c[0]);
oldm = (HBRUSH)dc.SelectObject(m);
dc.Ellipse(x1,y1,x2,y2);
m = CreateSolidBrush(c[1]);
oldm = (HBRUSH)dc.SelectObject(m);
do
{
x3 = x + rand() % abs(cx - x);
x4 = x + rand() % abs(cx - x);
} while (x3 < x4);
do
{
y3 = y + rand() % abs(cy - y);
y4 = y + rand() % abs(cy - y);
} while (y3 > y4);
dc.Pie(x1, y1, x2, y2, x3, y3, x4, y4);
m = CreateSolidBrush(c[2]);
oldm = (HBRUSH)dc.SelectObject(m);
do
{
x3 = cx + rand() % abs(cx - dx);
x4 = cx + rand() % abs(cx - dx);
} while (x3 < x4);
do
{
y3 = y + rand() % abs(cy - y);
y4 = y + rand() % abs(cy - y);
} while (y3 < y4);
dc.Pie(x1, y1, x2, y2, x3, y3, x4, y4);
m = CreateSolidBrush(c[3]);
oldm = (HBRUSH)dc.SelectObject(m);
do
{
x3 = x + rand() % abs(cx - x);
x4 = x + rand() % abs(cx - x);
} while (x3 > x4);
do
{
y3 = cy + rand() % abs(cy - dy);
y4 = cy + rand() % abs(cy - dy);
} while (y3 > y4);
dc.Pie(x1, y1, x2, y2, x3, y3, x4, y4);
m = CreateSolidBrush(c[4]);
oldm = (HBRUSH)dc.SelectObject(m);
do
{
x3 = cx + rand() % abs(cx - dx);
x4 = cx + rand() % abs(cx - dx);
} while (x3 > x4);
do
{
y3 = cy + rand() % abs(cy - dy);
y4 = cy + rand() % abs(cy - dy);
} while (y3 < y4);
dc.Pie(x1, y1, x2, y2, x3, y3, x4, y4);
// восстанавливаем цвета
DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
}
Щоб перевірити працездатність натисніть декілька раз на діаграму
Дякую за увагу!!!
Немає коментарів:
Дописати коментар