#include #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; }