среда, 26 апреля 2017 г.

Кольрова Кругова Діаграмма

Программа "Кольрова Кругова Діаграмма"





Сьогодні ми будемо робити кругову діаграмму. Назвемо проект "KugovaDiagramma"
Для цього ми:
1) Заходимо в 
Visual Studio і робимо її MFC APLICATION

2) Заходимо в Solution Explorer и там обираємо папку Header Files, а в ній KugovaDiagrammaDlg.h 

3) Туди записуємо цей розділ:


private:

HPEN hPenOxy, hOldPen;
HFONT hold, hNew, hbk;
HBRUSH m, oldm;
COLORREF cf, ck, c[25];

CPen d, oldd;
CBitmap pic;
CRect rc, w, kw[12];

CString ms, t, z;
int x1, y1, x2, y2;
int Matrix[50][50];
int RH, RW, k, i, j, cx, cy, dx, dy;
bool fg;
public:

void zastavka();
void rndcolor();
void diagramm();
void krdiagramm();

afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);

4) Теперь заходим в Solution Explorer и там выбираем папочку Source Files, а в ней (название программы)...Dlg.cpp (с таким окончанием)
Находим конец и там вставляем все это:

void CProgramDlg::zastavka()
{
CClientDC dc(this);
GetClientRect(&rc);

dx = abs(rc.right - rc.left) / 5;
dy = abs(rc.bottom - rc.top) / 5;

int pp = 0;
for (k = 0; k < 5; k++)
{
for (i = 0; i < 5; i++)
{

if (pp % 2 == 0)
{
cf = 0x0000DDFF;
ck = 0x00C4563D;
}
else
{
ck = 0x0000DDFF;
cf = 0x00C4563D;
}
hPenOxy = CreatePen(PS_SOLID, 6, ck);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
m = CreateSolidBrush(cf);
oldm = (HBRUSH)dc.SelectObject(m);

x1 = rc.left + k*dx;
y1 = rc.top + i*dy;
x2 = rc.left + (k + 1)*dx;
y2 = rc.top + (i + 1)*dy;

dc.Rectangle(x1, y1, x2, y2);
pp++;
}
}

DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);

}


void CProgramDlg::rndcolor()
{
CClientDC dc(this);
GetClientRect(&rc);

dx = abs(rc.right - rc.left) / 8;
dy = abs(rc.bottom - rc.top) / 8;


for (k = 0; k < 8; k++)
{
for (i = 0; i < 8; i++)
{

cx = rand() % 255;
cy = rand() % 255;
cz = rand() % 255;
cf = RGB(cx, cy, cz);

cx = rand() % 255;
cy = rand() % 255;
cz = rand() % 255;
ck = RGB(cx, cy, cz);


hPenOxy = CreatePen(PS_SOLID, 6, ck);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
m = CreateSolidBrush(cf);
oldm = (HBRUSH)dc.SelectObject(m);

x1 = rc.left + k*dx;
y1 = rc.top + i*dy;
x2 = rc.left + (k + 1)*dx;
y2 = rc.top + (i + 1)*dy;

dc.Rectangle(x1, y1, x2, y2);

}
}

DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
}




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);

}




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 + 190;
y1 = rc.top + 50;
dx=x2 = rc.right - 190;
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, 4, 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 - dy);
y4 = y + rand() % abs(cy - dy);
} 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 (x4 < x3);
do {
y3 = cy + rand() % abs(cy - dy);
y4 = cy + rand() % abs(cy - dy);
} while (y4 > y3);

dc.Pie(x1, y1, x2, y2, x3, y3, x4, y4);


// восстанавливаем цвета
DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);


}

Тепер заходимо в Project->Class Wizard->И обираємо 2 функции: WM_LBUTTONDOWN и WM_RBUTTONDOWN

Потім  в функцію натискання лівою кнопки миші мы вставляємо це:
krdiagramm();;
Потім  в функцію натискання правою кнопки миші мы вставляємо це:
 zastavka();

Тепер запускаємо наш проект і вас повинно вийти ось таке віконце з діаграммою:



Інформація звідси

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

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