Advertisement
Guest User

radek11

a guest
May 31st, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <windows.h>
  2. #include "stdafx.h"
  3. //#include <tchar.h>
  4. #include <windows.h>
  5. #include <fstream>
  6. #include <iostream>
  7. #include <string>
  8. #include <cmath>
  9. #include <cstdlib>
  10. using namespace std;
  11.  
  12. LPSTR NazwaKlasy = "Klasa Okienka";
  13. MSG Komunikat;
  14. ifstream plik;
  15.  
  16.  
  17. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  18.  
  19. HWND g, ax, ay, az, wszystkie, lewo, prawo, gora, dol, play, pause;
  20. HDC wykres;
  21. HPEN CzerwonePioro, ZielonePioro, NiebieskiePioro, ZoltePioro, Pudelko2;
  22. POINT stary2;
  23.  
  24.  
  25. const WORD ID_TIMER = 1;
  26.  
  27. int zegar = 0;
  28. float p1, p2, p3;
  29. float pomiary[20][4];
  30. float DaneWyj[4];
  31. float temp[3];
  32. float starypunktax;
  33. float starypunktay;
  34. float starypunktaz;
  35. float starypunktg;
  36.  
  37. bool zolty = false;
  38. bool zielony = false;
  39. bool czerwony = false;
  40. bool drawall = false;
  41. bool niebieski = false;
  42.  
  43. float stala = 250;
  44. float polx = 50;
  45. float przesuniecie = 0.3;
  46. int shortness = 1;
  47. int probki;
  48.  
  49. void PrzesuwanieWynikow(float pomiary[20][4]);
  50. void wczytajtrzy(ifstream &plik, float temp[3]);
  51. void odrzucanie_probek(ifstream &plik, int pomin);
  52. void OlbiczanieDanychWyjsciowych(float pomiary[20][4], float DaneWyj[3]);
  53.  
  54. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  55. {
  56.  
  57.     // WYPEŁNIANIE STRUKTURY
  58.     WNDCLASSEX wc;
  59.  
  60.     wc.cbSize = sizeof(WNDCLASSEX);
  61.     wc.style = 0;
  62.     wc.lpfnWndProc = WndProc;
  63.     wc.cbClsExtra = 0;
  64.     wc.cbWndExtra = 0;
  65.     wc.hInstance = hInstance;
  66.     wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  67.     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  68.     wc.hbrBackground = (HBRUSH)(3);
  69.     wc.lpszMenuName = NULL;
  70.     wc.lpszClassName = NazwaKlasy;
  71.     wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  72.  
  73.     // REJESTROWANIE KLASY OKNA
  74.     if (!RegisterClassEx(&wc))
  75.     {
  76.         MessageBox(NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...",
  77.             MB_ICONEXCLAMATION | MB_OK);
  78.         return 1;
  79.     }
  80.    
  81.  
  82.     // TWORZENIE OKNA
  83.     HWND hwnd;
  84.  
  85.     hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, NazwaKlasy, "Oto okienko", WS_OVERLAPPEDWINDOW,
  86.         CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL);
  87.  
  88.     if (hwnd == NULL)
  89.     {
  90.         MessageBox(NULL, "Okno odmówiło przyjścia na świat!", "Ale kicha...", MB_ICONEXCLAMATION);
  91.         return 1;
  92.     }
  93.  
  94.     plik.open("outputRobotForwardB02.log");
  95.     if (!plik.good())
  96.         MessageBox(hwnd, "Nie udalo sie otworzyc pliku!", "Ha!", MB_ICONINFORMATION);
  97.  
  98.     //POLE TEKSTOWE DO USUWANIA N PROBEK
  99.  
  100.     HWND napis = CreateWindowEx(0, "STATIC", NULL, WS_CHILD | WS_VISIBLE |
  101.         SS_LEFT, 280, 10, 150, 32, hwnd, NULL, hInstance, NULL);
  102.  
  103.     SetWindowText(napis, "Ile początkowych próbek usunąć?");
  104.  
  105.     HWND wpisz = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
  106.         400, 10, 41, 30, hwnd, NULL, hInstance, NULL);
  107.  
  108.     //pobieranie ilości próbek (w stringu)
  109.     DWORD dlugosc = GetWindowTextLength(wpisz);
  110.     LPSTR Bufor = (LPSTR)GlobalAlloc(GPTR, dlugosc + 1);
  111.     GetWindowText(wpisz, Bufor, dlugosc + 1);
  112.     probki = atoi(Bufor);
  113.  
  114.     //PRZYCISKI
  115.     g = CreateWindowEx(0, "BUTTON", "g(żółty)", WS_CHILD | WS_VISIBLE,
  116.         170, 60, 60, 50, hwnd, NULL, hInstance, NULL);
  117.  
  118.     ax = CreateWindowEx(0, "BUTTON", "ax(zielony)", WS_CHILD | WS_VISIBLE,
  119.         250, 60, 80, 50, hwnd, NULL, hInstance, NULL);
  120.  
  121.     ay = CreateWindowEx(0, "BUTTON", "ay(czerwony)", WS_CHILD | WS_VISIBLE,
  122.         350, 60, 90, 50, hwnd, NULL, hInstance, NULL);
  123.  
  124.     az = CreateWindowEx(0, "BUTTON", "az(niebieski)", WS_CHILD | WS_VISIBLE,
  125.         460, 60, 90, 50, hwnd, NULL, hInstance, NULL);
  126.  
  127.     wszystkie = CreateWindowEx(0, "BUTTON", "wszystkie", WS_CHILD | WS_VISIBLE,
  128.         570, 60, 75, 50, hwnd, NULL, hInstance, NULL);
  129.  
  130.     // rozszerzanie wykresu
  131.  
  132.     lewo = CreateWindowEx(0, "BUTTON", "<<<", WS_CHILD | WS_VISIBLE,
  133.         40, 70, 35, 35, hwnd, NULL, hInstance, NULL);
  134.  
  135.     prawo = CreateWindowEx(0, "BUTTON", ">>>", WS_CHILD | WS_VISIBLE,
  136.         90, 70, 35, 35, hwnd, NULL, hInstance, NULL);
  137.  
  138.     HWND napis3 = CreateWindowEx(0, "STATIC", NULL, WS_CHILD | WS_VISIBLE |
  139.         SS_LEFT, 30, 30, 120, 32, hwnd, NULL, hInstance, NULL);
  140.  
  141.     SetWindowText(napis3, "Regulacja rozszerzalności");
  142.  
  143.     // wydłużanie wykresu
  144.  
  145.     gora = CreateWindowEx(0, "BUTTON", "UP", WS_CHILD | WS_VISIBLE,
  146.         40, 160, 35, 35, hwnd, NULL, hInstance, NULL);
  147.  
  148.     dol = CreateWindowEx(0, "BUTTON", "DOWN", WS_CHILD | WS_VISIBLE,
  149.         90, 160, 60, 35, hwnd, NULL, hInstance, NULL);
  150.  
  151.     HWND napis4 = CreateWindowEx(0, "STATIC", NULL, WS_CHILD | WS_VISIBLE |
  152.         SS_LEFT, 45, 115, 80, 32, hwnd, NULL, hInstance, NULL);
  153.  
  154.     SetWindowText(napis4, "Regulacja Amplitudy");
  155.  
  156.     //timer
  157.  
  158.     play = CreateWindowEx(0, "BUTTON", "PLAY", WS_CHILD | WS_VISIBLE,
  159.         600, 150, 50, 50, hwnd, NULL, hInstance, NULL);
  160.  
  161.     pause = CreateWindowEx(0, "BUTTON", "PAUSE", WS_CHILD | WS_VISIBLE,
  162.         700, 150, 50, 50, hwnd, NULL, hInstance, NULL);
  163.  
  164.     //czas
  165.  
  166.     HWND suwakczas = NULL;
  167.     suwakczas = CreateWindowEx(0, "SCROLLBAR", NULL, WS_CHILD | WS_VISIBLE, 300, 150, 220, 21, hwnd, NULL, hInstance, NULL);
  168.  
  169.     HWND napis2 = CreateWindowEx(0, "STATIC", NULL, WS_CHILD | WS_VISIBLE |
  170.         SS_LEFT, 200, 150, 80, 32, hwnd, NULL, hInstance, NULL);
  171.  
  172.     SetWindowText(napis2, "Podziałka czasowa");
  173.  
  174.     ShowWindow(hwnd, nCmdShow); // Pokaż okienko...
  175.     UpdateWindow(hwnd);
  176.  
  177.     // wykres-osie
  178.     HDC hdcOkno = GetDC(hwnd);
  179.     HPEN CzarnePioro, Pudelko;
  180.     POINT stary;
  181.     CzarnePioro = CreatePen(PS_SOLID, 1, 000000);
  182.     Pudelko = (HPEN)SelectObject(hdcOkno, CzarnePioro);
  183.     //oś t
  184.     MoveToEx(hdcOkno, 50, 500, &stary);
  185.     LineTo(hdcOkno, 750, 500);
  186.     LineTo(hdcOkno, 740, 490);
  187.     LineTo(hdcOkno, 740, 510);
  188.     LineTo(hdcOkno, 750, 500);
  189.     //oś G
  190.     MoveToEx(hdcOkno, 50, 500, &stary);
  191.     LineTo(hdcOkno, 50, 200);
  192.     LineTo(hdcOkno, 60, 210);
  193.     LineTo(hdcOkno, 40, 210);
  194.     LineTo(hdcOkno, 50, 200);
  195.  
  196.     SelectObject(hdcOkno, Pudelko);
  197.     DeleteObject(CzarnePioro);
  198.     ReleaseDC(hwnd, hdcOkno);
  199.  
  200.     MessageBox(NULL, "Najpierw wpisz ilość próbek do usunięcia, wybiesz zmienną/zmienne, które chcesz zobaczyć na wykresiea, a potem kliknij PLAY. :)", "Hej!", MB_ICONEXCLAMATION);
  201.     // Pętla komunikatów
  202.     while (GetMessage(&Komunikat, NULL, 0, 0))
  203.     {
  204.         TranslateMessage(&Komunikat);
  205.         DispatchMessage(&Komunikat);
  206.     }
  207.     return Komunikat.wParam;
  208. }
  209.  
  210. // OBSŁUGA ZDARZEŃ
  211. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  212. {
  213.     switch (msg)
  214.     {
  215.     case WM_CLOSE:
  216.         DestroyWindow(hwnd);
  217.         break;
  218.  
  219.     case WM_DESTROY:
  220.         PostQuitMessage(0);
  221.         break;
  222.  
  223.     case WM_COMMAND:
  224.  
  225.         if ((HWND)lParam == lewo)
  226.         {
  227.             if (przesuniecie>1)
  228.                 przesuniecie--;
  229.         }
  230.  
  231.         if ((HWND)lParam == prawo)
  232.         {
  233.             if (przesuniecie<20)
  234.                 przesuniecie++;
  235.         }
  236.  
  237.         if ((HWND)lParam == gora)
  238.         {
  239.             if (stala<270)
  240.                 stala = stala + 10;
  241.         }
  242.  
  243.         if ((HWND)lParam == dol)
  244.         {
  245.             if (stala>100)
  246.                 stala = stala - 10;
  247.         }
  248.  
  249.         if ((HWND)lParam == play)
  250.         {
  251.             odrzucanie_probek(plik, probki);
  252.             if (SetTimer(hwnd, ID_TIMER, 5, NULL) == 0);
  253.         }
  254.  
  255.         if ((HWND)lParam == pause)
  256.         {
  257.             KillTimer(hwnd, ID_TIMER);
  258.         }
  259.  
  260.         if ((HWND)lParam == g)
  261.         {
  262.             if (zolty == true)
  263.                 zolty = false;
  264.             else if (zolty == false)
  265.                 zolty = true;
  266.         }
  267.  
  268.         if ((HWND)lParam == ax)
  269.         {
  270.             if (zielony == true)
  271.                 zielony = false;
  272.             else if (zielony == false)
  273.                 zielony = true;
  274.         }
  275.         if ((HWND)lParam == ay)
  276.         {
  277.             if (czerwony == true)
  278.                 czerwony = false;
  279.             else if (czerwony == false)
  280.                 czerwony = true;
  281.         }
  282.         if ((HWND)lParam == az)
  283.         {
  284.             if (niebieski == true)
  285.                 niebieski = false;
  286.             else if (niebieski == false)
  287.                 niebieski = true;
  288.         }
  289.         if ((HWND)lParam == wszystkie)
  290.         {
  291.             if (drawall == true)
  292.             {
  293.                 drawall = false;
  294.                 czerwony = false;
  295.                 zielony = false;
  296.                 zolty = false;
  297.                 niebieski = false;
  298.             }
  299.             else if (drawall == false)
  300.             {
  301.                 drawall = true;
  302.                 czerwony = true;
  303.                 zielony = true;
  304.                 zolty = true;
  305.                 niebieski = true;
  306.             }
  307.         }
  308.         break;
  309.  
  310.     case WM_TIMER:
  311.  
  312.  
  313.         if (zegar == 0)
  314.         {
  315.             for (int i = 0; i<20; i++) {           //poczatkowe uzupelnianie danych
  316.                 wczytajtrzy(plik, temp);
  317.                 pomiary[i][0] = temp[0];
  318.                 pomiary[i][1] = temp[1];
  319.                 pomiary[i][2] = temp[2];
  320.                 pomiary[i][3] = sqrt(temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2]);
  321.             }
  322.  
  323.             OlbiczanieDanychWyjsciowych(pomiary, DaneWyj);
  324.  
  325.             //punkt startowy (wartość y)
  326.  
  327.             starypunktax = 500 + stala*DaneWyj[0];
  328.             starypunktay = 500 + stala*DaneWyj[1];
  329.             starypunktaz = 500 + stala*DaneWyj[2];
  330.             starypunktg = 500 - stala*DaneWyj[3];
  331.  
  332.         }
  333.  
  334.         PrzesuwanieWynikow(pomiary);
  335.         wczytajtrzy(plik, temp);
  336.         pomiary[19][0] = temp[0];
  337.         pomiary[19][1] = temp[1];
  338.         pomiary[19][2] = temp[2];
  339.         pomiary[19][3] = sqrt(temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2]);
  340.         OlbiczanieDanychWyjsciowych(pomiary, DaneWyj);       //DaneWyj to tablica z danymi do rysowania
  341.         polx += przesuniecie;
  342.         {
  343.             HDC wykres = GetDC(hwnd);
  344.             CzerwonePioro = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
  345.             NiebieskiePioro = CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
  346.             ZielonePioro = CreatePen(PS_SOLID, 1, RGB(0, 255, 0));
  347.             ZoltePioro = CreatePen(PS_SOLID, 1, RGB(255, 255, 0));
  348.  
  349.             if (zielony == true)
  350.             {
  351.                 Pudelko2 = (HPEN)SelectObject(wykres, ZielonePioro);
  352.                 MoveToEx(wykres, polx - przesuniecie, starypunktax, &stary2);
  353.                 LineTo(wykres, polx, 500 + stala*DaneWyj[0]);
  354.                 starypunktax = 500 + stala*DaneWyj[0];
  355.             }
  356.  
  357.             if (czerwony == true)
  358.             {
  359.                 SelectObject(wykres, CzerwonePioro);
  360.                 MoveToEx(wykres, polx - przesuniecie, starypunktay, &stary2);
  361.                 LineTo(wykres, polx, 500 + stala*DaneWyj[1]);
  362.                 starypunktay = 500 + stala*DaneWyj[1];
  363.             }
  364.  
  365.             if (niebieski == true)
  366.             {
  367.                 SelectObject(wykres, NiebieskiePioro);
  368.                 MoveToEx(wykres, polx - przesuniecie, starypunktaz, &stary2);
  369.                 LineTo(wykres, polx, 500 + stala * DaneWyj[2]);
  370.                 starypunktaz = 500 + stala * DaneWyj[2];
  371.             }
  372.  
  373.             if (zolty == true)
  374.             {
  375.                 SelectObject(wykres, ZoltePioro);
  376.                 MoveToEx(wykres, polx - przesuniecie, starypunktg, &stary2);
  377.                 LineTo(wykres, polx, 500 - stala * DaneWyj[3]);
  378.                 starypunktg = 500 - stala * DaneWyj[3];
  379.             }
  380.  
  381.  
  382.  
  383.             zegar++; }
  384.         break;
  385.  
  386.  
  387.     default:
  388.         return DefWindowProc(hwnd, msg, wParam, lParam);
  389.     }
  390.  
  391.     return 0;
  392. }
  393.  
  394. void OlbiczanieDanychWyjsciowych(float pomiary[20][4], float DaneWyj[3])
  395. {
  396.     float sumax = 0;
  397.     float sumay = 0;
  398.     float sumaz = 0;
  399.     float sumag = 0;
  400.     float srednia = 0;
  401.  
  402.     for (int i = 0; i<20; i++) {
  403.         sumax = sumax + pomiary[i][0];
  404.         sumay = sumay + pomiary[i][1];
  405.         sumaz = sumaz + pomiary[i][2];
  406.         sumag = sumag + pomiary[i][3];
  407.     }
  408.     DaneWyj[0] = sumax / 20;
  409.     DaneWyj[1] = sumay / 20;
  410.     DaneWyj[2] = sumaz / 20;
  411.     DaneWyj[3] = sumag / 20;
  412. }
  413.  
  414. void odrzucanie_probek(ifstream &plik, int pomin)
  415. {
  416.     int licznik = 0;
  417.     float n;
  418.  
  419.     for (int i = 0; i<pomin; i++)
  420.         for (int j = 0; j< 12; j++)
  421.             plik >> n;
  422. }
  423. void wczytajtrzy(ifstream &plik, float temp[3])
  424. {
  425.     for (int i = 0; i<3; i++)
  426.         temp[i] = 0;
  427.  
  428.     int licznik = 0;
  429.     int pomin;
  430.     float n;
  431.  
  432.     int zapis_licz = 0;
  433.     int x = 0;
  434.     for (int i = 0; i<4; i++)
  435.     {
  436.         x++;
  437.         float a;
  438.         float b;
  439.         float c;
  440.         plik >> a >> b >> c;
  441.         if (i == 1)
  442.         {
  443.             licznik++;
  444.             if (plik.good())
  445.             {
  446.                 temp[0] = a;
  447.                 temp[1] = b;
  448.                 temp[2] = c;
  449.             }
  450.             else break; //zakoÄcz wczytywanie danych - wyst^pi¸ jakia b¸^d (np. nie ma wi«cej danych w pliku)
  451.         }
  452.     } //while
  453. }
  454.  
  455. void PrzesuwanieWynikow(float pomiary[20][4])
  456. {
  457.     for (int i = 1; i<20; i++)
  458.         for (int j = 0; j<4; j++)
  459.             pomiary[i - 1][j] = pomiary[i][j];
  460. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement