Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <stdlib.h>
- #include <time.h>
- #include <vector>
- using std::vector;
- HINSTANCE hInst;
- TCHAR ClassName[] = TEXT("Nazwa klasy");
- TCHAR AppName[] = TEXT("Nazwa aplikacji");
- POINT ekran = {800, 600};
- const COLORREF kolory[] = {RGB(255, 0, 0), RGB(200, 0, 0), RGB(150, 0,0)};
- HBRUSH Pedzel;
- struct Wykres
- {
- long int a,b;
- }wykres;
- vector<Wykres> dane;
- long int max = 0;
- unsigned int margines = 50, podzialka_x=0, podzialka_y=0, ilepodzialek_x = 5;
- wchar_t bufor[100];
- int k=0;
- LRESULT CALLBACK WndProc(HWND Okno, UINT Kom, WPARAM wParam, LPARAM lParam)
- {
- switch(Kom)
- {
- case WM_CREATE:
- srand(time(NULL));
- break;
- case WM_PAINT:
- HDC Kontekst;
- PAINTSTRUCT PS;
- RECT R;
- GetClientRect(Okno,&R);
- Kontekst = BeginPaint(Okno,&PS);
- SetMapMode(Kontekst,MM_ANISOTROPIC);
- SetWindowExtEx(Kontekst,ekran.x,ekran.y,NULL);
- SetViewportExtEx(Kontekst,R.right,-R.bottom,NULL);
- SetViewportOrgEx(Kontekst,0,R.bottom,NULL);
- SaveDC(Kontekst);
- podzialka_x = (ekran.x - 2*margines) / (max/1000); //zbyt duze liczby
- podzialka_y = (ekran.y - margines) / dane.size();
- Pedzel = CreateSolidBrush(RGB(0,230,0));
- SelectObject(Kontekst,Pedzel);
- for(unsigned int i=0;i<dane.size();++i)
- {
- for(unsigned int j=0;j<ilepodzialek_x;++j)
- {
- Rectangle(Kontekst,margines+j*(ekran.x-2*margines)/5,margines+podzialka_y*i+podzialka_y,margines+j*(ekran.x-2*margines)/5+(ekran.x-2*margines)/5,margines+podzialka_y*i);
- }
- }
- RestoreDC(Kontekst,-1);
- DeleteObject(Pedzel);
- for(unsigned int i=0;i<dane.size();++i)
- {
- Pedzel = CreateSolidBrush(kolory[dane[i].b]);
- SelectObject(Kontekst,Pedzel);
- swprintf(bufor,L"%d",i+1);
- TextOut(Kontekst,0,i*podzialka_y+podzialka_y+margines,bufor,wcslen(bufor));
- Rectangle(Kontekst,margines,i*podzialka_y+podzialka_y+margines,(dane[i].a/1000)*podzialka_x+margines,i*podzialka_y+margines);
- RestoreDC(Kontekst,-1);
- DeleteObject(Pedzel);
- }
- for(unsigned int i=0;i<ilepodzialek_x;++i)
- {
- swprintf(bufor,L"%d",max/5*(i+1));
- TextOut(Kontekst,(ekran.x-margines)/5*(i+1),margines,bufor,wcslen(bufor));
- }
- DeleteDC(Kontekst);
- EndPaint(Okno,&PS);
- break;
- case WM_LBUTTONDOWN:
- long int tmp;
- tmp = 1000+rand() % 100000-999;
- if(max < tmp) max = tmp;
- if (k>2) k=0;
- wykres.a=tmp;
- wykres.b=k;
- dane.push_back(wykres);
- k++;
- InvalidateRect(Okno,NULL,true);
- break;
- case WM_DESTROY:
- dane.clear();
- PostQuitMessage(0);
- default:
- return DefWindowProc(Okno,Kom,wParam,lParam);
- }
- return 0;
- }
- WNDCLASSEX RejestrujKlase()
- {
- WNDCLASSEX wc;
- wc.cbClsExtra = 0;
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.cbWndExtra = 0;
- wc.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
- wc.hCursor = 0;
- wc.hIcon = 0;
- wc.hIconSm = 0;
- wc.hInstance = hInst;
- wc.lpfnWndProc = WndProc;
- wc.lpszClassName = ClassName;
- wc.lpszMenuName = 0;
- wc.style = CS_HREDRAW | CS_VREDRAW;
- return wc;
- }
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- hInstance = hInst;
- WNDCLASSEX wc = RejestrujKlase();
- if(!RegisterClassEx(&wc))
- {
- MessageBox(NULL,L"Nie udalo sie zarejestrowac klasy okna",L"Blad",NULL);
- return 1;
- }
- HWND Okno = CreateWindowEx(NULL,ClassName,AppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,ekran.x,ekran.y,0,0,hInstance,0);
- if(!Okno)
- {
- MessageBox(NULL,L"Nie udalo sie stworzyc uchwytu okna",L"Blad",NULL);
- return 2;
- }
- UpdateWindow(Okno);
- ShowWindow(Okno,nCmdShow);
- MSG Kom;
- while(GetMessage(&Kom,0,0,0) > 0)
- {
- TranslateMessage(&Kom);
- DispatchMessage(&Kom);
- }
- return Kom.wParam;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement