bruno63 icon

Paint #2

bruno63 | PRO | 11/08/15 03:26:28 PM UTC | 0 ⭐ | 10644 👁️ | Never ⏰ | []
C++ (WinAPI) |

0 B

|

None

|

0 👍

/

0 👎

#include <Windows.h>
#include <string>
 
TCHAR ClassName[] = L"KlasaOkien";
RECT user_size;
int kolory[18] =
{
    0x000000,
    0xFFFFFF,
    0x7F7F7F,
    0xFF0000,
    0xFF7F00,
    0xFF7F7F,
    0xFF007F,
    0xFF00FF,
    0XFFFF00,
    0x7F0000,
    0x7F7F00,
    0x7F007F,
    0x7FFF00,
    0x7F00FF,
    0x007F00,
    0x00FFFF,
    0x00FF00,
    0x0000FF
};
class Kwadrat{
    friend class Przybornik;
protected:
    POINT left_top;
    POINT right_bottom;
    int color;
public:
    Kwadrat()
    {
        left_top.x = 0;
        left_top.y = 0;
        right_bottom.x = 0;
        right_bottom.y = 0;
        color = kolory[0];
    }
    Kwadrat(int x1, int y1, int x2, int y2, int col)
    {
        left_top.x = x1;
        left_top.y = y1;
        right_bottom.x = x2;
        right_bottom.y = y2;
        color = col;
    }
    void Rysuj(HDC hdc)
    {
        HBRUSH kolor = CreateSolidBrush(color);
        SelectObject(hdc, kolor);
        Rectangle(hdc, left_top.x, left_top.y, right_bottom.x, right_bottom.y);
        DeleteObject(kolor);
    }
    bool PorPoz(int x, int y)
    {
        if (x >= left_top.x && x <= right_bottom.x && y >= left_top.y && y <= right_bottom.y)
            return true;
        else return false;
    }
    int retCol()
    {
        return color;
    }
};
 
class PedzelTyp : public Kwadrat{
protected:
    int ksztalt; // 1 - kwadrat | 2 - ko�o | 3 - tr�jk�t
public:
    PedzelTyp(int x1, int y1, int x2, int y2, int col, int ksz) : Kwadrat(x1, y1, x2, y2, col), ksztalt(ksz) {};
    PedzelTyp()
    {
        Kwadrat();
        ksztalt = 1;
    }
    void Rysuj(HDC hdc)
    {
        switch (ksztalt)
        {
        default:
        {
                   HBRUSH kolor = CreateSolidBrush(color);
                   HBRUSH nic = (HBRUSH)GetStockObject(WHITE_BRUSH);
                   SelectObject(hdc, nic);
                   Rectangle(hdc, left_top.x, left_top.y, right_bottom.x, right_bottom.y);
                   DeleteObject(nic);
                   SelectObject(hdc, kolor);
                   Rectangle(hdc, left_top.x + 5, left_top.y + 5, right_bottom.x - 5, right_bottom.y - 5);
                   DeleteObject(kolor);
        }break;
        case 2:
        {
                  HBRUSH kolor = CreateSolidBrush(color);
                  HBRUSH nic = (HBRUSH)GetStockObject(WHITE_BRUSH);
                  SelectObject(hdc, nic);
                  Rectangle(hdc, left_top.x, left_top.y, right_bottom.x, right_bottom.y);
                  DeleteObject(nic);
                  SelectObject(hdc, kolor);
                  Ellipse(hdc, left_top.x + 5, left_top.y + 5, right_bottom.x - 5, right_bottom.y - 5);
                  DeleteObject(kolor);
        }break;
        case 3:
        {
                  HBRUSH kolor = CreateSolidBrush(color);
                  HBRUSH nic = (HBRUSH)GetStockObject(WHITE_BRUSH);
                  SelectObject(hdc, nic);
                  Rectangle(hdc, left_top.x, left_top.y, right_bottom.x, right_bottom.y);
                  DeleteObject(nic);
                  SelectObject(hdc, kolor);
                  POINT wierzcholki[3];
                  wierzcholki[0].x = (right_bottom.x + left_top.x) / 2;
                  wierzcholki[0].y = left_top.y + 5;
                  wierzcholki[1].x = left_top.x + 5;
                  wierzcholki[1].y = right_bottom.y - 5;
                  wierzcholki[2].x = right_bottom.x - 5;
                  wierzcholki[2].y = right_bottom.y - 5;
                  Polygon(hdc, wierzcholki, 3);
                  DeleteObject(kolor);
        }break;
        }
    }
    void Rysujb(HDC hdc)
    {
        switch (ksztalt)
        {
        default:
        {
                   HBRUSH kolor = CreateSolidBrush(color);
                   SelectObject(hdc, kolor);
                   Rectangle(hdc, left_top.x + 5, left_top.y + 5, right_bottom.x - 5, right_bottom.y - 5);
                   DeleteObject(kolor);
        }break;
        case 2:
        {
                  HBRUSH kolor = CreateSolidBrush(color);
                  SelectObject(hdc, kolor);
                  Ellipse(hdc, left_top.x + 5, left_top.y + 5, right_bottom.x - 5, right_bottom.y - 5);
                  DeleteObject(kolor);
        }break;
        case 3:
        {
                  HBRUSH kolor = CreateSolidBrush(color);
                  SelectObject(hdc, kolor);
                  POINT wierzcholki[3];
                  wierzcholki[0].x = (right_bottom.x + left_top.x) / 2;
                  wierzcholki[0].y = left_top.y + 5;
                  wierzcholki[1].x = left_top.x + 5;
                  wierzcholki[1].y = right_bottom.y - 5;
                  wierzcholki[2].x = right_bottom.x - 5;
                  wierzcholki[2].y = right_bottom.y - 5;
                  Polygon(hdc, wierzcholki, 3);
                  DeleteObject(kolor);
        }break;
        }
    }
    int retKsz()
    {
        return ksztalt;
    }
};
 
class Przybornik{
protected:
    RECT poz;
    int color;
    Kwadrat PaletaKolorow[18];
    PedzelTyp Pedzle[3];
public:
    Przybornik(int col)
    {
        color = col;
    }
    void RysujPalete(HDC hdc)
    {
        for (int i = 0; i<18; ++i)
        {
            if (i % 2 == 1)
            {
                PaletaKolorow[i] = Kwadrat(poz.left + 15, poz.top + (i * 20), poz.left + 45, poz.top + 30 + (i * 20), kolory[i]);
            }
            else
            {
                PaletaKolorow[i] = Kwadrat(poz.left + 75, poz.top + 20 + (i * 20), poz.left + 105, poz.top + 50 + (i * 20), kolory[i]);
            }
        }
        for (int i = 0; i<18; ++i)
            PaletaKolorow[i].Rysuj(hdc);
        RECT last_el;
        last_el.top = PaletaKolorow[17].left_top.y;
        last_el.bottom = PaletaKolorow[17].right_bottom.y;
        last_el.left = PaletaKolorow[17].left_top.x;
        last_el.right = PaletaKolorow[17].right_bottom.x;
        Pedzle[0] = PedzelTyp(last_el.left, last_el.top + 100, last_el.right, last_el.bottom + 100, kolory[0], 1);
        Pedzle[0].Rysuj(hdc);
        Pedzle[1] = PedzelTyp(last_el.left + 40, last_el.top + 100, last_el.right + 40, last_el.bottom + 100, kolory[0], 2);
        Pedzle[1].Rysuj(hdc);
        Pedzle[2] = PedzelTyp(last_el.left + 80, last_el.top + 100, last_el.right + 80, last_el.bottom + 100, kolory[0], 3);
        Pedzle[2].Rysuj(hdc);
    }
    void Rysuj(HWND hwnd, HDC hdc)
    {
        HBRUSH kolor = CreateSolidBrush(color);
        SelectObject(hdc, kolor);
        GetClientRect(hwnd, &user_size);
        poz.left = user_size.right - 150;
        poz.bottom = user_size.bottom;
        poz.right = user_size.right;
        poz.top = user_size.top;
        Rectangle(hdc, poz.left, poz.top, poz.right, poz.bottom);
        DeleteObject(kolor);
        RysujPalete(hdc);
    }
    Kwadrat RetKwadrat(int i)
    {
        return PaletaKolorow[i];
    }
    PedzelTyp RetPedzel(int i)
    {
        return Pedzle[i];
    }
 
};
Przybornik* ref;
 
int glKolor = kolory[3];
int glKsztalt = 1;
 
static LRESULT CALLBACK wndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_PAINT:
    {
                     PAINTSTRUCT ps;
                     HDC hdc = BeginPaint(hWnd, &ps);
                     ref->Rysuj(hWnd, hdc);
                     EndPaint(hWnd, &ps);
    }break;
    case WM_LBUTTONDOWN:
    {
                           POINT pos;
                           pos.x = LOWORD(lParam);
                           pos.y = HIWORD(lParam);
                           for (int i = 0; i<18; ++i)
                           {
                               if (ref->RetKwadrat(i).PorPoz(pos.x, pos.y) == true)
                                   glKolor = ref->RetKwadrat(i).retCol();
                           }
                           if (pos.x<user_size.right - 150)
                           {
                               HDC hdc = GetDC(hWnd);
                               PedzelTyp nowy(pos.x, pos.y, pos.x + 20, pos.y + 20, glKolor, glKsztalt);
                               nowy.Rysujb(hdc);
                               ReleaseDC(hWnd, hdc);
                           }
    }break;
 
    case WM_RBUTTONDOWN:
    {
                           POINT pos;
                           pos.x = LOWORD(lParam);
                           pos.y = HIWORD(lParam);
                           for (int i = 0; i<3; ++i)
                           {
                               if (ref->RetPedzel(i).PorPoz(pos.x, pos.y) == true)
                                   glKsztalt = ref->RetPedzel(i).retKsz();
                           }
    }break;
    case WM_DESTROY:
    {
                       PostQuitMessage(0);
    }break;
    default: return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
}
 
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
 
    WNDCLASSEX wc;
    wc.cbClsExtra = 0;
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hIconSm = NULL;
    wc.hInstance = GetModuleHandle(NULL);
    wc.lpfnWndProc = &wndProc;
    wc.lpszClassName = ClassName;
    wc.lpszMenuName = NULL;
    wc.style = CS_HREDRAW | CS_VREDRAW;
    if (!RegisterClassEx(&wc))
    {
        MessageBox(NULL, L"ERROR: REJESTRACJA", L"ERROR", NULL);
        return 1;
    }
 
    HWND Okno = CreateWindowEx(0, ClassName, L"Paint", WS_VISIBLE | WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 600, 600, NULL, NULL, hInstance, NULL);
    if (Okno == NULL)
    {
        MessageBox(NULL, L"ERROR: TWORZENIE OKNA", L"ERROR", NULL);
        return 1;
    }
    Przybornik glowny(0xCCCCCC);
    ref = &glowny;
    ShowWindow(Okno, nCmdShow);
    UpdateWindow(Okno);
    MSG msg;
    while (GetMessage(&msg, 0, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    UnregisterClass(ClassName, hInstance);
    return static_cast<int>(msg.wParam);
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎