Drop Down MenusCSS Drop Down MenuPure CSS Dropdown Menu

середа, 26 квітня 2017 р.

Програма "Кругова діаграма 8 сегментів"

Як йшлося у статті де описувалося як зробити програму "Кругова діаграма" ми спробуємо зробити вже 8 сегментів... Ну що ж почнемо!!!
Ми візьмемо як шаблон на программу це архів програми "Кольорова гістограма", який можна завантажити на сайті miwzua.com



Після завантаження заходимо в програму та компілюємо проект


Потім через Solution Explorer заходимо в ProgramDlg.h шукаємо розділ public: та після  void diagramm(); пишемо void krdiagramm();



Перейдемо у 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);

}

Вставимо ось цей код

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



Все готово!!!!



Щоб перевірити працездатність натисніть декілька раз на діаграму

Дякую за увагу!!!

Немає коментарів:

Дописати коментар