Hyluss icon

MiniPaint

Hyluss | PRO | 10/30/16 06:36:21 PM UTC | 0 ⭐ | 10474 👁️ | Never ⏰ | []
C++ (WinAPI) |

0 B

|

None

|

0 👍

/

0 👎

#include <windows.h>
 
#define SCREEN_WIDTH 1000
#define SCREEN_HIGHT 1000
#define KWADRAT 40
 
int Kolory[]={ RGB (195,195,195), // jasny szary
               RGB(127,127,127), //szary
               RGB(200,100,50), //khaki
               RGB(185,122,87), //brazowy
               RGB(34,177,76), //zielony
               RGB(115,148,16), //kupa                  5
               RGB(63,72,204), // granatowy 
               RGB(163,73,164), // ciemnyfiolet
               RGB(112,146,190), // morski
               RGB(89,17,238), // niebieski
               RGB (255,255,255), // bialy          10
               RGB (0,0,0) // ciorny
            };
 
typedef enum
{
    TrojkatP =1 ,
    TrojkatW,
    Elipsa,
    Kwadrat 
}TFigury;
 
TCHAR NazwaAplikacji[] = TEXT("Apka");
TCHAR NazwaKlasy[] = TEXT("OKNOGLOWNE");
 
bool WlaczRysowanie=false;
bool RysujTrojkatP, RysujTrojkatW,RysujElipsa,RysujKwadrat = false;
int LKolor=0,RKolor=0, Figura;
 
bool ObszarRysowania(LPARAM lParam)
{
    float mouseX = LOWORD(lParam);
    if (mouseX < SCREEN_WIDTH-300 ) return true;
    else return false;
}
 
int WyborKoloru (LPARAM lParam)
{
    float mouseX = LOWORD(lParam);
    float mouseY = HIWORD(lParam);
    
    for (int i=1; i<10; i++)
    {
        if (mouseX >= SCREEN_WIDTH-280 && mouseX <= SCREEN_WIDTH-240 && mouseY >= 10+KWADRAT*i && mouseY <=10 + KWADRAT*i+30)
        {
            return i;
        }
    }
    return 0;
}
 
void WyborFigury(LPARAM lParam)
{
    float mouseX = LOWORD(lParam);
    float mouseY = HIWORD(lParam);
    // Rectangle (hdcOkno , 720, 500 , 762, 542);               //trojkat bialy
    if (mouseX >= 720 && mouseY >=500 && mouseX <= 762 && mouseY <= 542)
    {
        Figura = TrojkatP;
        RysujTrojkatP = true;
        RysujTrojkatW = false;
        RysujElipsa = false;
        RysujKwadrat = false;
    }
    //Rectangle (hdcOkno , 762+20, 500 , 762+42+20, 542);       //trojakt wypelniony
    if (mouseX >= 762+20 && mouseY >=500 && mouseX <= 762+42+20 && mouseY <= 542)
    {
        Figura = TrojkatW;
        RysujTrojkatP = false;
        RysujTrojkatW = true;
        RysujElipsa = false;
        RysujKwadrat = false;
    }
    // Rectangle (hdcOkno , 720, 500+42 + 20 , 762, 542+42+20); //elpisa
    if (mouseX >= 720 && mouseY >=500+42 + 20 && mouseX <= 762 && mouseY <= 542+42+20)
    {
        Figura = Elipsa;
        RysujTrojkatP = false;
        RysujTrojkatW = false;
        RysujElipsa = true;
        RysujKwadrat = false;
    }
    //Rectangle (hdcOkno , 762+20, 500+42+20 , 762+42+20, 542+42+20); //kwadrat
    if (mouseX >= 762+20 && mouseY >=500+42 + 20 && mouseX <= 762+42+20 && mouseY <= 542+42+20)
    {
        Figura = Kwadrat;
        RysujTrojkatP = false;
        RysujTrojkatW = false;
        RysujElipsa = false;
        RysujKwadrat = true;
    }       
}
 
static LRESULT CALLBACK FunkcjaOkienkowa(HWND Okno, UINT Komunikat, WPARAM wParam, LPARAM lParam)
{    
    PAINTSTRUCT ps;
    HBRUSH Pedzel;
    HPEN Olowek;
    HDC hdcOkno;
 
    switch (Komunikat) {
        case WM_PAINT:
            {
                hdcOkno = BeginPaint (Okno, &ps);           
                Olowek = CreatePen (PS_SOLID, 5,Kolory[9] );
                SelectObject (hdcOkno, Olowek);
                Pedzel = CreateSolidBrush (  Kolory[0] );
                SelectObject (hdcOkno, Pedzel);                 
                Rectangle( hdcOkno, SCREEN_WIDTH-300, 0, SCREEN_WIDTH-10, SCREEN_HIGHT );
                Olowek = CreatePen (PS_SOLID, 0,Kolory[0] );
                SelectObject (hdcOkno, Olowek);
                for (int i=1; i<10 ; i ++ )
                {
                    Pedzel = CreateSolidBrush (  Kolory[i] );
                    SelectObject (hdcOkno, Pedzel); 
                    Rectangle (hdcOkno , SCREEN_WIDTH-280, 10 + KWADRAT*i , SCREEN_WIDTH-240, 10 + KWADRAT*i+30 ); 
                }
                Olowek = CreatePen (PS_SOLID, 2,Kolory[11] ); //czarny
                Pedzel = CreateSolidBrush (  Kolory[10] );  // bialy
                SelectObject (hdcOkno, Pedzel); 
                SelectObject (hdcOkno, Olowek);
                Rectangle (hdcOkno , 720, 500 , 762, 542);              //trojkat bialy
                Rectangle (hdcOkno , 762+20, 500 , 762+42+20, 542);     //trojakt wypelniony
                Rectangle (hdcOkno , 720, 500+42 + 20 , 762, 542+42+20); //elpisa
                Rectangle (hdcOkno , 762+20, 500+42+20 , 762+42+20, 542+42+20); //kwadrat           
                //bialy trojkat
                POINT Trojkatpusty[ 3 ];
                Trojkatpusty[ 0 ].x = 723; Trojkatpusty[ 0 ].y = 503;
                Trojkatpusty[ 1 ].x = 757; Trojkatpusty[ 1 ].y = 503;
                Trojkatpusty[ 2 ].x = 740; Trojkatpusty[ 2 ].y = 537;
                Polygon( hdcOkno, Trojkatpusty, 3 );
                Olowek = CreatePen (PS_SOLID, 0,Kolory[10] ); //bialy
                Pedzel = CreateSolidBrush (  Kolory[11] ); // czarny
                SelectObject (hdcOkno, Pedzel); 
                SelectObject (hdcOkno, Olowek);
                //trojakt wypelniony
                POINT Trojkatpelny[ 3 ];
                Trojkatpelny[ 0 ].x = 762+20+3; Trojkatpelny[ 0 ].y = 503;
                Trojkatpelny[ 1 ].x = 762+42+20-5; Trojkatpelny[ 1 ].y = 503;
                Trojkatpelny[ 2 ].x = ((762+20+3) + (762+42+20-5)) / 2; Trojkatpelny[ 2 ].y = 537;
                Polygon( hdcOkno, Trojkatpelny, 3 );
                //elipsa
                //Rectangle (hdcOkno , 720, 500+42 + 20 , 762, 542+42+20);
                Ellipse (hdcOkno,  722,500+42+18, 760,542+42+18);
                //kwadrat
                //Rectangle (hdcOkno , 762+20, 500+42+20 , 762+42+20, 542+42+20);
                Rectangle (hdcOkno, 762+22,500+42+22,762+42+18,542+42+18);
                DeleteObject (Pedzel);
                DeleteObject(Olowek);
                EndPaint (Okno,&ps);
            }
            break;
 
        case WM_MOUSEMOVE:
            POINT Tp[3];
            if ( !ObszarRysowania (lParam) )
            {
                WlaczRysowanie= false;
            }
            else
            {       
                if(WlaczRysowanie)
                {
                    HDC hdcOkno = GetDC(Okno);
                    Olowek = CreatePen (PS_SOLID, 2, Kolory[RKolor] );
                    Pedzel = CreateSolidBrush (  Kolory[LKolor] );
                    SelectObject (hdcOkno, Pedzel); 
                    SelectObject (hdcOkno, Olowek);
                    if (RysujTrojkatP)
                    {
                        Pedzel = CreateSolidBrush (  Kolory [10] ); //bialy
                        SelectObject (hdcOkno, Pedzel);                         
                        Tp[0].x = LOWORD(lParam); Tp[0].y = HIWORD(lParam);
                        Tp[1].x = LOWORD(lParam) + (50 / 2); Tp[1].y = HIWORD(lParam) - 50;
                        Tp[2].x = LOWORD(lParam) + 50; Tp[2].y = HIWORD(lParam);
                        Polygon (hdcOkno,Tp,3);
                    }
                    if (RysujTrojkatW)
                    {                       
                        Tp[0].x = LOWORD(lParam); Tp[0].y = HIWORD(lParam);
                        Tp[1].x = LOWORD(lParam) + (50 / 2); Tp[1].y = HIWORD(lParam) - 50;
                        Tp[2].x = LOWORD(lParam) + 50; Tp[2].y = HIWORD(lParam);    
                        Polygon (hdcOkno,Tp,3);
                    }
                    if (RysujElipsa)
                    {                       
                        Ellipse (hdcOkno, LOWORD(lParam), HIWORD(lParam),LOWORD(lParam) + 100,  HIWORD(lParam) + 100);
                    }
                    if (RysujKwadrat)
                    {
                        Rectangle (hdcOkno, LOWORD(lParam), HIWORD(lParam),LOWORD(lParam) + 50,  HIWORD(lParam) + 50);
                    }
                    DeleteObject (Pedzel);
                    DeleteObject (Olowek);
                    ReleaseDC(Okno, hdcOkno);
                }
            }
            break;
 
        case WM_LBUTTONDOWN:        
            if ( !ObszarRysowania (lParam) )
            {
                WlaczRysowanie= false;
                if (LKolor) 
                {
                    if (WyborKoloru(lParam) ) LKolor = ( WyborKoloru(lParam) );                     
                }
                else LKolor = WyborKoloru(lParam);
                WyborFigury(lParam);        
            }
            else
            {           
                WlaczRysowanie=true;                
            }
            break;
 
        case WM_LBUTTONUP:
            WlaczRysowanie = false;
            break;
 
        case WM_RBUTTONDOWN:
            if ( !ObszarRysowania (lParam) )
            {
                if (RKolor)
                {
                    if (WyborKoloru(lParam) ) RKolor = ( WyborKoloru(lParam) );
                }
                else RKolor = WyborKoloru(lParam);
            }
            break;
 
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
            
        default:
            return DefWindowProc(Okno, Komunikat, wParam, lParam);
    }
    return 0;
}
 
static bool RejestrujKlasy()
{
    WNDCLASSEX wc;
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.cbClsExtra = wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH );
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wc.hInstance = GetModuleHandle(NULL);
    wc.lpfnWndProc = &FunkcjaOkienkowa;
    wc.lpszClassName = NazwaKlasy;
    wc.lpszMenuName = NULL;
    wc.style = CS_HREDRAW | CS_VREDRAW;
    return (RegisterClassEx(&wc) != 0);
}
 
static void WyrejestrujKlasy()
{
    UnregisterClass(NazwaKlasy, GetModuleHandle(NULL));
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // Zarejestruj klasę. Protestuj, jeżeli wystąpił błąd.
    if (!RejestrujKlasy()) 
    {
        MessageBox(NULL, TEXT("Nie udało się zarejestrować klasy okna!"), NazwaAplikacji, MB_ICONSTOP | MB_OK);
        return 1;
    }
    // Stwórz główne okno. Również protestuj, jeżeli wystąpił błąd.
    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);
    if (hwnd == NULL) 
    {
        MessageBox(NULL, TEXT("Nie udało się stworzyć głównego okna!"), NazwaAplikacji, MB_ICONSTOP | MB_OK);
        return 2;
    }
    // Wyświetl i uaktualnij nowo stworzone okno.
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
    // Główna pętla komunikatów wątku.
    MSG Komunikat;
    while (GetMessage(&Komunikat, NULL, 0, 0) > 0) 
    {
        TranslateMessage(&Komunikat);
        DispatchMessage(&Komunikat);
    }
    // Zwolnij pamięć klas i zakończ proces.
    WyrejestrujKlasy();
    return 0;
}

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

    |

    👍

    /

    👎

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

    0 B

    |

    👍

    /

    👎