bruno63

Paint #2

Nov 8th, 2015
1,189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Windows.h>
  2. #include <string>
  3.  
  4. TCHAR ClassName[] = L"KlasaOkien";
  5. RECT user_size;
  6. int kolory[18] =
  7. {
  8.     0x000000,
  9.     0xFFFFFF,
  10.     0x7F7F7F,
  11.     0xFF0000,
  12.     0xFF7F00,
  13.     0xFF7F7F,
  14.     0xFF007F,
  15.     0xFF00FF,
  16.     0XFFFF00,
  17.     0x7F0000,
  18.     0x7F7F00,
  19.     0x7F007F,
  20.     0x7FFF00,
  21.     0x7F00FF,
  22.     0x007F00,
  23.     0x00FFFF,
  24.     0x00FF00,
  25.     0x0000FF
  26. };
  27. class Kwadrat{
  28.     friend class Przybornik;
  29. protected:
  30.     POINT left_top;
  31.     POINT right_bottom;
  32.     int color;
  33. public:
  34.     Kwadrat()
  35.     {
  36.         left_top.x = 0;
  37.         left_top.y = 0;
  38.         right_bottom.x = 0;
  39.         right_bottom.y = 0;
  40.         color = kolory[0];
  41.     }
  42.     Kwadrat(int x1, int y1, int x2, int y2, int col)
  43.     {
  44.         left_top.x = x1;
  45.         left_top.y = y1;
  46.         right_bottom.x = x2;
  47.         right_bottom.y = y2;
  48.         color = col;
  49.     }
  50.     void Rysuj(HDC hdc)
  51.     {
  52.         HBRUSH kolor = CreateSolidBrush(color);
  53.         SelectObject(hdc, kolor);
  54.         Rectangle(hdc, left_top.x, left_top.y, right_bottom.x, right_bottom.y);
  55.         DeleteObject(kolor);
  56.     }
  57.     bool PorPoz(int x, int y)
  58.     {
  59.         if (x >= left_top.x && x <= right_bottom.x && y >= left_top.y && y <= right_bottom.y)
  60.             return true;
  61.         else return false;
  62.     }
  63.     int retCol()
  64.     {
  65.         return color;
  66.     }
  67. };
  68.  
  69. class PedzelTyp : public Kwadrat{
  70. protected:
  71.     int ksztalt; // 1 - kwadrat | 2 - ko�o | 3 - tr�jk�t
  72. public:
  73.     PedzelTyp(int x1, int y1, int x2, int y2, int col, int ksz) : Kwadrat(x1, y1, x2, y2, col), ksztalt(ksz) {};
  74.     PedzelTyp()
  75.     {
  76.         Kwadrat();
  77.         ksztalt = 1;
  78.     }
  79.     void Rysuj(HDC hdc)
  80.     {
  81.         switch (ksztalt)
  82.         {
  83.         default:
  84.         {
  85.                    HBRUSH kolor = CreateSolidBrush(color);
  86.                    HBRUSH nic = (HBRUSH)GetStockObject(WHITE_BRUSH);
  87.                    SelectObject(hdc, nic);
  88.                    Rectangle(hdc, left_top.x, left_top.y, right_bottom.x, right_bottom.y);
  89.                    DeleteObject(nic);
  90.                    SelectObject(hdc, kolor);
  91.                    Rectangle(hdc, left_top.x + 5, left_top.y + 5, right_bottom.x - 5, right_bottom.y - 5);
  92.                    DeleteObject(kolor);
  93.         }break;
  94.         case 2:
  95.         {
  96.                   HBRUSH kolor = CreateSolidBrush(color);
  97.                   HBRUSH nic = (HBRUSH)GetStockObject(WHITE_BRUSH);
  98.                   SelectObject(hdc, nic);
  99.                   Rectangle(hdc, left_top.x, left_top.y, right_bottom.x, right_bottom.y);
  100.                   DeleteObject(nic);
  101.                   SelectObject(hdc, kolor);
  102.                   Ellipse(hdc, left_top.x + 5, left_top.y + 5, right_bottom.x - 5, right_bottom.y - 5);
  103.                   DeleteObject(kolor);
  104.         }break;
  105.         case 3:
  106.         {
  107.                   HBRUSH kolor = CreateSolidBrush(color);
  108.                   HBRUSH nic = (HBRUSH)GetStockObject(WHITE_BRUSH);
  109.                   SelectObject(hdc, nic);
  110.                   Rectangle(hdc, left_top.x, left_top.y, right_bottom.x, right_bottom.y);
  111.                   DeleteObject(nic);
  112.                   SelectObject(hdc, kolor);
  113.                   POINT wierzcholki[3];
  114.                   wierzcholki[0].x = (right_bottom.x + left_top.x) / 2;
  115.                   wierzcholki[0].y = left_top.y + 5;
  116.                   wierzcholki[1].x = left_top.x + 5;
  117.                   wierzcholki[1].y = right_bottom.y - 5;
  118.                   wierzcholki[2].x = right_bottom.x - 5;
  119.                   wierzcholki[2].y = right_bottom.y - 5;
  120.                   Polygon(hdc, wierzcholki, 3);
  121.                   DeleteObject(kolor);
  122.         }break;
  123.         }
  124.     }
  125.     void Rysujb(HDC hdc)
  126.     {
  127.         switch (ksztalt)
  128.         {
  129.         default:
  130.         {
  131.                    HBRUSH kolor = CreateSolidBrush(color);
  132.                    SelectObject(hdc, kolor);
  133.                    Rectangle(hdc, left_top.x + 5, left_top.y + 5, right_bottom.x - 5, right_bottom.y - 5);
  134.                    DeleteObject(kolor);
  135.         }break;
  136.         case 2:
  137.         {
  138.                   HBRUSH kolor = CreateSolidBrush(color);
  139.                   SelectObject(hdc, kolor);
  140.                   Ellipse(hdc, left_top.x + 5, left_top.y + 5, right_bottom.x - 5, right_bottom.y - 5);
  141.                   DeleteObject(kolor);
  142.         }break;
  143.         case 3:
  144.         {
  145.                   HBRUSH kolor = CreateSolidBrush(color);
  146.                   SelectObject(hdc, kolor);
  147.                   POINT wierzcholki[3];
  148.                   wierzcholki[0].x = (right_bottom.x + left_top.x) / 2;
  149.                   wierzcholki[0].y = left_top.y + 5;
  150.                   wierzcholki[1].x = left_top.x + 5;
  151.                   wierzcholki[1].y = right_bottom.y - 5;
  152.                   wierzcholki[2].x = right_bottom.x - 5;
  153.                   wierzcholki[2].y = right_bottom.y - 5;
  154.                   Polygon(hdc, wierzcholki, 3);
  155.                   DeleteObject(kolor);
  156.         }break;
  157.         }
  158.     }
  159.     int retKsz()
  160.     {
  161.         return ksztalt;
  162.     }
  163. };
  164.  
  165. class Przybornik{
  166. protected:
  167.     RECT poz;
  168.     int color;
  169.     Kwadrat PaletaKolorow[18];
  170.     PedzelTyp Pedzle[3];
  171. public:
  172.     Przybornik(int col)
  173.     {
  174.         color = col;
  175.     }
  176.     void RysujPalete(HDC hdc)
  177.     {
  178.         for (int i = 0; i<18; ++i)
  179.         {
  180.             if (i % 2 == 1)
  181.             {
  182.                 PaletaKolorow[i] = Kwadrat(poz.left + 15, poz.top + (i * 20), poz.left + 45, poz.top + 30 + (i * 20), kolory[i]);
  183.             }
  184.             else
  185.             {
  186.                 PaletaKolorow[i] = Kwadrat(poz.left + 75, poz.top + 20 + (i * 20), poz.left + 105, poz.top + 50 + (i * 20), kolory[i]);
  187.             }
  188.         }
  189.         for (int i = 0; i<18; ++i)
  190.             PaletaKolorow[i].Rysuj(hdc);
  191.         RECT last_el;
  192.         last_el.top = PaletaKolorow[17].left_top.y;
  193.         last_el.bottom = PaletaKolorow[17].right_bottom.y;
  194.         last_el.left = PaletaKolorow[17].left_top.x;
  195.         last_el.right = PaletaKolorow[17].right_bottom.x;
  196.         Pedzle[0] = PedzelTyp(last_el.left, last_el.top + 100, last_el.right, last_el.bottom + 100, kolory[0], 1);
  197.         Pedzle[0].Rysuj(hdc);
  198.         Pedzle[1] = PedzelTyp(last_el.left + 40, last_el.top + 100, last_el.right + 40, last_el.bottom + 100, kolory[0], 2);
  199.         Pedzle[1].Rysuj(hdc);
  200.         Pedzle[2] = PedzelTyp(last_el.left + 80, last_el.top + 100, last_el.right + 80, last_el.bottom + 100, kolory[0], 3);
  201.         Pedzle[2].Rysuj(hdc);
  202.     }
  203.     void Rysuj(HWND hwnd, HDC hdc)
  204.     {
  205.         HBRUSH kolor = CreateSolidBrush(color);
  206.         SelectObject(hdc, kolor);
  207.         GetClientRect(hwnd, &user_size);
  208.         poz.left = user_size.right - 150;
  209.         poz.bottom = user_size.bottom;
  210.         poz.right = user_size.right;
  211.         poz.top = user_size.top;
  212.         Rectangle(hdc, poz.left, poz.top, poz.right, poz.bottom);
  213.         DeleteObject(kolor);
  214.         RysujPalete(hdc);
  215.     }
  216.     Kwadrat RetKwadrat(int i)
  217.     {
  218.         return PaletaKolorow[i];
  219.     }
  220.     PedzelTyp RetPedzel(int i)
  221.     {
  222.         return Pedzle[i];
  223.     }
  224.  
  225. };
  226. Przybornik* ref;
  227.  
  228. int glKolor = kolory[3];
  229. int glKsztalt = 1;
  230.  
  231. static LRESULT CALLBACK wndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  232. {
  233.     switch (uMsg)
  234.     {
  235.     case WM_PAINT:
  236.     {
  237.                      PAINTSTRUCT ps;
  238.                      HDC hdc = BeginPaint(hWnd, &ps);
  239.                      ref->Rysuj(hWnd, hdc);
  240.                      EndPaint(hWnd, &ps);
  241.     }break;
  242.     case WM_LBUTTONDOWN:
  243.     {
  244.                            POINT pos;
  245.                            pos.x = LOWORD(lParam);
  246.                            pos.y = HIWORD(lParam);
  247.                            for (int i = 0; i<18; ++i)
  248.                            {
  249.                                if (ref->RetKwadrat(i).PorPoz(pos.x, pos.y) == true)
  250.                                    glKolor = ref->RetKwadrat(i).retCol();
  251.                            }
  252.                            if (pos.x<user_size.right - 150)
  253.                            {
  254.                                HDC hdc = GetDC(hWnd);
  255.                                PedzelTyp nowy(pos.x, pos.y, pos.x + 20, pos.y + 20, glKolor, glKsztalt);
  256.                                nowy.Rysujb(hdc);
  257.                                ReleaseDC(hWnd, hdc);
  258.                            }
  259.     }break;
  260.  
  261.     case WM_RBUTTONDOWN:
  262.     {
  263.                            POINT pos;
  264.                            pos.x = LOWORD(lParam);
  265.                            pos.y = HIWORD(lParam);
  266.                            for (int i = 0; i<3; ++i)
  267.                            {
  268.                                if (ref->RetPedzel(i).PorPoz(pos.x, pos.y) == true)
  269.                                    glKsztalt = ref->RetPedzel(i).retKsz();
  270.                            }
  271.     }break;
  272.     case WM_DESTROY:
  273.     {
  274.                        PostQuitMessage(0);
  275.     }break;
  276.     default: return DefWindowProc(hWnd, uMsg, wParam, lParam);
  277.     }
  278. }
  279.  
  280. int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
  281. {
  282.  
  283.     WNDCLASSEX wc;
  284.     wc.cbClsExtra = 0;
  285.     wc.cbSize = sizeof(WNDCLASSEX);
  286.     wc.cbWndExtra = 0;
  287.     wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  288.     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  289.     wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  290.     wc.hIconSm = NULL;
  291.     wc.hInstance = GetModuleHandle(NULL);
  292.     wc.lpfnWndProc = &wndProc;
  293.     wc.lpszClassName = ClassName;
  294.     wc.lpszMenuName = NULL;
  295.     wc.style = CS_HREDRAW | CS_VREDRAW;
  296.     if (!RegisterClassEx(&wc))
  297.     {
  298.         MessageBox(NULL, L"ERROR: REJESTRACJA", L"ERROR", NULL);
  299.         return 1;
  300.     }
  301.  
  302.     HWND Okno = CreateWindowEx(0, ClassName, L"Paint", WS_VISIBLE | WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 600, 600, NULL, NULL, hInstance, NULL);
  303.     if (Okno == NULL)
  304.     {
  305.         MessageBox(NULL, L"ERROR: TWORZENIE OKNA", L"ERROR", NULL);
  306.         return 1;
  307.     }
  308.     Przybornik glowny(0xCCCCCC);
  309.     ref = &glowny;
  310.     ShowWindow(Okno, nCmdShow);
  311.     UpdateWindow(Okno);
  312.     MSG msg;
  313.     while (GetMessage(&msg, 0, 0, 0) > 0)
  314.     {
  315.         TranslateMessage(&msg);
  316.         DispatchMessage(&msg);
  317.     }
  318.     UnregisterClass(ClassName, hInstance);
  319.     return static_cast<int>(msg.wParam);
  320. }
Advertisement