Hyluss

MiniPaint

Oct 30th, 2016
880
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <windows.h>
  2.  
  3. #define SCREEN_WIDTH 1000
  4. #define SCREEN_HIGHT 1000
  5. #define KWADRAT 40
  6.  
  7. int Kolory[]={ RGB (195,195,195), // jasny szary
  8.                RGB(127,127,127), //szary
  9.                RGB(200,100,50), //khaki
  10.                RGB(185,122,87), //brazowy
  11.                RGB(34,177,76), //zielony
  12.                RGB(115,148,16), //kupa                  5
  13.                RGB(63,72,204), // granatowy
  14.                RGB(163,73,164), // ciemnyfiolet
  15.                RGB(112,146,190), // morski
  16.                RGB(89,17,238), // niebieski
  17.                RGB (255,255,255), // bialy          10
  18.                RGB (0,0,0) // ciorny
  19.             };
  20.  
  21. typedef enum
  22. {
  23.     TrojkatP =1 ,
  24.     TrojkatW,
  25.     Elipsa,
  26.     Kwadrat
  27. }TFigury;
  28.  
  29. TCHAR NazwaAplikacji[] = TEXT("Apka");
  30. TCHAR NazwaKlasy[] = TEXT("OKNOGLOWNE");
  31.  
  32. bool WlaczRysowanie=false;
  33. bool RysujTrojkatP, RysujTrojkatW,RysujElipsa,RysujKwadrat = false;
  34. int LKolor=0,RKolor=0, Figura;
  35.  
  36. bool ObszarRysowania(LPARAM lParam)
  37. {
  38.     float mouseX = LOWORD(lParam);
  39.     if (mouseX < SCREEN_WIDTH-300 ) return true;
  40.     else return false;
  41. }
  42.  
  43. int WyborKoloru (LPARAM lParam)
  44. {
  45.     float mouseX = LOWORD(lParam);
  46.     float mouseY = HIWORD(lParam);
  47.    
  48.     for (int i=1; i<10; i++)
  49.     {
  50.         if (mouseX >= SCREEN_WIDTH-280 && mouseX <= SCREEN_WIDTH-240 && mouseY >= 10+KWADRAT*i && mouseY <=10 + KWADRAT*i+30)
  51.         {
  52.             return i;
  53.         }
  54.     }
  55.     return 0;
  56. }
  57.  
  58. void WyborFigury(LPARAM lParam)
  59. {
  60.     float mouseX = LOWORD(lParam);
  61.     float mouseY = HIWORD(lParam);
  62.     // Rectangle (hdcOkno , 720, 500 , 762, 542);               //trojkat bialy
  63.     if (mouseX >= 720 && mouseY >=500 && mouseX <= 762 && mouseY <= 542)
  64.     {
  65.         Figura = TrojkatP;
  66.         RysujTrojkatP = true;
  67.         RysujTrojkatW = false;
  68.         RysujElipsa = false;
  69.         RysujKwadrat = false;
  70.     }
  71.     //Rectangle (hdcOkno , 762+20, 500 , 762+42+20, 542);       //trojakt wypelniony
  72.     if (mouseX >= 762+20 && mouseY >=500 && mouseX <= 762+42+20 && mouseY <= 542)
  73.     {
  74.         Figura = TrojkatW;
  75.         RysujTrojkatP = false;
  76.         RysujTrojkatW = true;
  77.         RysujElipsa = false;
  78.         RysujKwadrat = false;
  79.     }
  80.     // Rectangle (hdcOkno , 720, 500+42 + 20 , 762, 542+42+20); //elpisa
  81.     if (mouseX >= 720 && mouseY >=500+42 + 20 && mouseX <= 762 && mouseY <= 542+42+20)
  82.     {
  83.         Figura = Elipsa;
  84.         RysujTrojkatP = false;
  85.         RysujTrojkatW = false;
  86.         RysujElipsa = true;
  87.         RysujKwadrat = false;
  88.     }
  89.     //Rectangle (hdcOkno , 762+20, 500+42+20 , 762+42+20, 542+42+20); //kwadrat
  90.     if (mouseX >= 762+20 && mouseY >=500+42 + 20 && mouseX <= 762+42+20 && mouseY <= 542+42+20)
  91.     {
  92.         Figura = Kwadrat;
  93.         RysujTrojkatP = false;
  94.         RysujTrojkatW = false;
  95.         RysujElipsa = false;
  96.         RysujKwadrat = true;
  97.     }      
  98. }
  99.  
  100. static LRESULT CALLBACK FunkcjaOkienkowa(HWND Okno, UINT Komunikat, WPARAM wParam, LPARAM lParam)
  101. {    
  102.     PAINTSTRUCT ps;
  103.     HBRUSH Pedzel;
  104.     HPEN Olowek;
  105.     HDC hdcOkno;
  106.  
  107.     switch (Komunikat) {
  108.         case WM_PAINT:
  109.             {
  110.                 hdcOkno = BeginPaint (Okno, &ps);          
  111.                 Olowek = CreatePen (PS_SOLID, 5,Kolory[9] );
  112.                 SelectObject (hdcOkno, Olowek);
  113.                 Pedzel = CreateSolidBrush (  Kolory[0] );
  114.                 SelectObject (hdcOkno, Pedzel);                
  115.                 Rectangle( hdcOkno, SCREEN_WIDTH-300, 0, SCREEN_WIDTH-10, SCREEN_HIGHT );
  116.                 Olowek = CreatePen (PS_SOLID, 0,Kolory[0] );
  117.                 SelectObject (hdcOkno, Olowek);
  118.                 for (int i=1; i<10 ; i ++ )
  119.                 {
  120.                     Pedzel = CreateSolidBrush (  Kolory[i] );
  121.                     SelectObject (hdcOkno, Pedzel);
  122.                     Rectangle (hdcOkno , SCREEN_WIDTH-280, 10 + KWADRAT*i , SCREEN_WIDTH-240, 10 + KWADRAT*i+30 );
  123.                 }
  124.                 Olowek = CreatePen (PS_SOLID, 2,Kolory[11] ); //czarny
  125.                 Pedzel = CreateSolidBrush (  Kolory[10] );  // bialy
  126.                 SelectObject (hdcOkno, Pedzel);
  127.                 SelectObject (hdcOkno, Olowek);
  128.                 Rectangle (hdcOkno , 720, 500 , 762, 542);              //trojkat bialy
  129.                 Rectangle (hdcOkno , 762+20, 500 , 762+42+20, 542);     //trojakt wypelniony
  130.                 Rectangle (hdcOkno , 720, 500+42 + 20 , 762, 542+42+20); //elpisa
  131.                 Rectangle (hdcOkno , 762+20, 500+42+20 , 762+42+20, 542+42+20); //kwadrat          
  132.                 //bialy trojkat
  133.                 POINT Trojkatpusty[ 3 ];
  134.                 Trojkatpusty[ 0 ].x = 723; Trojkatpusty[ 0 ].y = 503;
  135.                 Trojkatpusty[ 1 ].x = 757; Trojkatpusty[ 1 ].y = 503;
  136.                 Trojkatpusty[ 2 ].x = 740; Trojkatpusty[ 2 ].y = 537;
  137.                 Polygon( hdcOkno, Trojkatpusty, 3 );
  138.                 Olowek = CreatePen (PS_SOLID, 0,Kolory[10] ); //bialy
  139.                 Pedzel = CreateSolidBrush (  Kolory[11] ); // czarny
  140.                 SelectObject (hdcOkno, Pedzel);
  141.                 SelectObject (hdcOkno, Olowek);
  142.                 //trojakt wypelniony
  143.                 POINT Trojkatpelny[ 3 ];
  144.                 Trojkatpelny[ 0 ].x = 762+20+3; Trojkatpelny[ 0 ].y = 503;
  145.                 Trojkatpelny[ 1 ].x = 762+42+20-5; Trojkatpelny[ 1 ].y = 503;
  146.                 Trojkatpelny[ 2 ].x = ((762+20+3) + (762+42+20-5)) / 2; Trojkatpelny[ 2 ].y = 537;
  147.                 Polygon( hdcOkno, Trojkatpelny, 3 );
  148.                 //elipsa
  149.                 //Rectangle (hdcOkno , 720, 500+42 + 20 , 762, 542+42+20);
  150.                 Ellipse (hdcOkno,  722,500+42+18, 760,542+42+18);
  151.                 //kwadrat
  152.                 //Rectangle (hdcOkno , 762+20, 500+42+20 , 762+42+20, 542+42+20);
  153.                 Rectangle (hdcOkno, 762+22,500+42+22,762+42+18,542+42+18);
  154.                 DeleteObject (Pedzel);
  155.                 DeleteObject(Olowek);
  156.                 EndPaint (Okno,&ps);
  157.             }
  158.             break;
  159.  
  160.         case WM_MOUSEMOVE:
  161.             POINT Tp[3];
  162.             if ( !ObszarRysowania (lParam) )
  163.             {
  164.                 WlaczRysowanie= false;
  165.             }
  166.             else
  167.             {      
  168.                 if(WlaczRysowanie)
  169.                 {
  170.                     HDC hdcOkno = GetDC(Okno);
  171.                     Olowek = CreatePen (PS_SOLID, 2, Kolory[RKolor] );
  172.                     Pedzel = CreateSolidBrush (  Kolory[LKolor] );
  173.                     SelectObject (hdcOkno, Pedzel);
  174.                     SelectObject (hdcOkno, Olowek);
  175.                     if (RysujTrojkatP)
  176.                     {
  177.                         Pedzel = CreateSolidBrush (  Kolory [10] ); //bialy
  178.                         SelectObject (hdcOkno, Pedzel);                        
  179.                         Tp[0].x = LOWORD(lParam); Tp[0].y = HIWORD(lParam);
  180.                         Tp[1].x = LOWORD(lParam) + (50 / 2); Tp[1].y = HIWORD(lParam) - 50;
  181.                         Tp[2].x = LOWORD(lParam) + 50; Tp[2].y = HIWORD(lParam);
  182.                         Polygon (hdcOkno,Tp,3);
  183.                     }
  184.                     if (RysujTrojkatW)
  185.                     {                      
  186.                         Tp[0].x = LOWORD(lParam); Tp[0].y = HIWORD(lParam);
  187.                         Tp[1].x = LOWORD(lParam) + (50 / 2); Tp[1].y = HIWORD(lParam) - 50;
  188.                         Tp[2].x = LOWORD(lParam) + 50; Tp[2].y = HIWORD(lParam);   
  189.                         Polygon (hdcOkno,Tp,3);
  190.                     }
  191.                     if (RysujElipsa)
  192.                     {                      
  193.                         Ellipse (hdcOkno, LOWORD(lParam), HIWORD(lParam),LOWORD(lParam) + 100,  HIWORD(lParam) + 100);
  194.                     }
  195.                     if (RysujKwadrat)
  196.                     {
  197.                         Rectangle (hdcOkno, LOWORD(lParam), HIWORD(lParam),LOWORD(lParam) + 50,  HIWORD(lParam) + 50);
  198.                     }
  199.                     DeleteObject (Pedzel);
  200.                     DeleteObject (Olowek);
  201.                     ReleaseDC(Okno, hdcOkno);
  202.                 }
  203.             }
  204.             break;
  205.  
  206.         case WM_LBUTTONDOWN:       
  207.             if ( !ObszarRysowania (lParam) )
  208.             {
  209.                 WlaczRysowanie= false;
  210.                 if (LKolor)
  211.                 {
  212.                     if (WyborKoloru(lParam) ) LKolor = ( WyborKoloru(lParam) );                    
  213.                 }
  214.                 else LKolor = WyborKoloru(lParam);
  215.                 WyborFigury(lParam);       
  216.             }
  217.             else
  218.             {          
  219.                 WlaczRysowanie=true;               
  220.             }
  221.             break;
  222.  
  223.         case WM_LBUTTONUP:
  224.             WlaczRysowanie = false;
  225.             break;
  226.  
  227.         case WM_RBUTTONDOWN:
  228.             if ( !ObszarRysowania (lParam) )
  229.             {
  230.                 if (RKolor)
  231.                 {
  232.                     if (WyborKoloru(lParam) ) RKolor = ( WyborKoloru(lParam) );
  233.                 }
  234.                 else RKolor = WyborKoloru(lParam);
  235.             }
  236.             break;
  237.  
  238.         case WM_DESTROY:
  239.             PostQuitMessage(0);
  240.             break;
  241.            
  242.         default:
  243.             return DefWindowProc(Okno, Komunikat, wParam, lParam);
  244.     }
  245.     return 0;
  246. }
  247.  
  248. static bool RejestrujKlasy()
  249. {
  250.     WNDCLASSEX wc;
  251.     wc.cbSize = sizeof(WNDCLASSEX);
  252.     wc.cbClsExtra = wc.cbWndExtra = 0;
  253.     wc.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH );
  254.     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  255.     wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  256.     wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  257.     wc.hInstance = GetModuleHandle(NULL);
  258.     wc.lpfnWndProc = &FunkcjaOkienkowa;
  259.     wc.lpszClassName = NazwaKlasy;
  260.     wc.lpszMenuName = NULL;
  261.     wc.style = CS_HREDRAW | CS_VREDRAW;
  262.     return (RegisterClassEx(&wc) != 0);
  263. }
  264.  
  265. static void WyrejestrujKlasy()
  266. {
  267.     UnregisterClass(NazwaKlasy, GetModuleHandle(NULL));
  268. }
  269.  
  270. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  271. {
  272.     // Zarejestruj klasę. Protestuj, jeżeli wystąpił błąd.
  273.     if (!RejestrujKlasy())
  274.     {
  275.         MessageBox(NULL, TEXT("Nie udało się zarejestrować klasy okna!"), NazwaAplikacji, MB_ICONSTOP | MB_OK);
  276.         return 1;
  277.     }
  278.     // Stwórz główne okno. Również protestuj, jeżeli wystąpił błąd.
  279.     HWND hwnd = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_CLIENTEDGE, NazwaKlasy, TEXT("Okno"), WS_OVERLAPPED | WS_CAPTION |  WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, SCREEN_WIDTH, SCREEN_HIGHT, NULL, NULL, hInstance, NULL);
  280.     if (hwnd == NULL)
  281.     {
  282.         MessageBox(NULL, TEXT("Nie udało się stworzyć głównego okna!"), NazwaAplikacji, MB_ICONSTOP | MB_OK);
  283.         return 2;
  284.     }
  285.     // Wyświetl i uaktualnij nowo stworzone okno.
  286.     ShowWindow(hwnd, nCmdShow);
  287.     UpdateWindow(hwnd);
  288.     // Główna pętla komunikatów wątku.
  289.     MSG Komunikat;
  290.     while (GetMessage(&Komunikat, NULL, 0, 0) > 0)
  291.     {
  292.         TranslateMessage(&Komunikat);
  293.         DispatchMessage(&Komunikat);
  294.     }
  295.     // Zwolnij pamięć klas i zakończ proces.
  296.     WyrejestrujKlasy();
  297.     return 0;
  298. }
Advertisement