#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
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎