Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /******************************************************************
- Grafika komputerowa, środowisko MS Windows - program przykładowy
- *****************************************************************/
- #include <windows.h>
- //deklaracja funkcji obslugi okna
- LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
- POINT litera[] = {{77, 62}, {36, 64}, {36, 146}, {35, 205}, {164, 206}, {163, 66}};
- POINT litera2[] = {{58,91}, {58,184}, {139,182}, {134, 91}};
- POINT litera3[] = {{78,43}, {108,44}, {120,14}, {93,16}};
- int delta_myszX=0;
- int delta_myszY=0;
- bool klik = false;
- bool unklik = false;
- int staraMyszX=0;
- int staraMyszY=0;
- //funkcja Main - dla Windows
- int WINAPI WinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nCmdShow)
- {
- MSG meldunek; //innymi slowy "komunikat"
- WNDCLASS nasza_klasa; //klasa głównego okna aplikacji
- HWND okno;
- static char nazwa_klasy[] = "Podstawowa";
- //Definiujemy klase głównego okna aplikacji
- //Okreslamy tu wlasciwosci okna, szczegoly wygladu oraz
- //adres funkcji przetwarzajacej komunikaty
- nasza_klasa.style = CS_HREDRAW | CS_VREDRAW;
- nasza_klasa.lpfnWndProc = WndProc; //adres funkcji realizującej przetwarzanie meldunków
- nasza_klasa.cbClsExtra = 0 ;
- nasza_klasa.cbWndExtra = 0 ;
- nasza_klasa.hInstance = hInstance; //identyfikator procesu przekazany przez MS Windows podczas uruchamiania programu
- nasza_klasa.hIcon = 0;
- nasza_klasa.hCursor = LoadCursor(0, IDC_ARROW);
- nasza_klasa.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH);
- nasza_klasa.lpszMenuName = "Menu" ;
- nasza_klasa.lpszClassName = nazwa_klasy;
- //teraz rejestrujemy klasę okna głównego
- RegisterClass (&nasza_klasa);
- /*tworzymy okno główne
- okno będzie miało zmienne rozmiary, listwę z tytułem, menu systemowym
- i przyciskami do zwijania do ikony i rozwijania na cały ekran, po utworzeniu
- będzie widoczne na ekranie */
- okno = CreateWindow(nazwa_klasy, "Grafika komputerowa", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
- CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
- /* wybór rozmiaru i usytuowania okna pozostawiamy systemowi MS Windows */
- ShowWindow (okno, nCmdShow) ;
- //odswiezamy zawartosc okna
- UpdateWindow (okno) ;
- SetTimer(okno, 1, 100, 0);
- // GŁÓWNA PĘTLA PROGRAMU
- while (GetMessage(&meldunek, NULL, 0, 0))
- /* pobranie komunikatu z kolejki; funkcja GetMessage zwraca FALSE tylko dla
- komunikatu wm_Quit; dla wszystkich pozostałych komunikatów zwraca wartość TRUE */
- {
- TranslateMessage(&meldunek); // wstępna obróbka komunikatu
- DispatchMessage(&meldunek); // przekazanie komunikatu właściwemu adresatowi (czyli funkcji obslugujacej odpowiednie okno)
- }
- return (int)meldunek.wParam;
- }
- /********************************************************************
- FUNKCJA OKNA realizujaca przetwarzanie meldunków kierowanych do okna aplikacji*/
- LRESULT CALLBACK WndProc (HWND okno, UINT kod_meldunku, WPARAM wParam, LPARAM lParam)
- {
- HMENU mPlik, mInfo, mGlowne;
- /* PONIŻSZA INSTRUKCJA DEFINIUJE REAKCJE APLIKACJI NA POSZCZEGÓLNE MELDUNKI */
- switch (kod_meldunku)
- {
- case WM_CREATE: //meldunek wysyłany w momencie tworzenia okna
- mPlik = CreateMenu();
- AppendMenu(mPlik, MF_STRING, 100, "&Zapiszcz...");
- AppendMenu(mPlik, MF_SEPARATOR, 0, "");
- AppendMenu(mPlik, MF_STRING, 101, "&Koniec");
- mInfo = CreateMenu();
- AppendMenu(mInfo, MF_STRING, 200, "&Autor...");
- mGlowne = CreateMenu();
- AppendMenu(mGlowne, MF_POPUP, (UINT_PTR) mPlik, "&Plik");
- AppendMenu(mGlowne, MF_POPUP, (UINT_PTR) mInfo, "&Informacja");
- SetMenu(okno, mGlowne);
- DrawMenuBar(okno);
- return 0;
- case WM_COMMAND: //reakcje na wybór opcji z menu
- switch (wParam)
- {
- case 100: if(MessageBox(okno, "Zapiszczeć?", "Pisk", MB_YESNO) == IDYES)
- MessageBeep(0);
- break;
- case 101: DestroyWindow(okno); //wysylamy meldunek WM_DESTROY
- break;
- case 200: MessageBox(okno, "Imię i nazwisko:\nNumer indeksu: ", "Autor", MB_OK);
- }
- return 0;
- case WM_LBUTTONDOWN: //reakcja na lewy przycisk myszki
- {
- int x = LOWORD(lParam);
- int y = HIWORD(lParam);
- if(klik==false)
- {
- staraMyszX=280+60;
- staraMyszY=300;
- delta_myszX=x - staraMyszX;
- delta_myszY=y - staraMyszY;
- klik=true;
- }
- InvalidateRect(okno, 0, TRUE);
- return 0;
- }
- case WM_MOUSEMOVE:
- {
- int x = LOWORD(lParam);
- int y = HIWORD(lParam);
- if(klik==true)
- {
- delta_myszX=x - staraMyszX;
- delta_myszY=y - staraMyszY;
- InvalidateRect(okno, 0, TRUE);
- }
- return 0;
- }
- case WM_LBUTTONUP: //reakcja na lewy przycisk myszki
- {
- int x = LOWORD(lParam);
- int y = HIWORD(lParam);
- klik=false;
- staraMyszX=280+60;
- staraMyszY=300;
- return 0;
- }
- case WM_PAINT:
- {
- PAINTSTRUCT paint;
- HDC kontekst;
- POINT bez[]={{200,374}, {261, 371}, {265, 175},
- {317, 220}, {332, 306}, {398, 306},
- {427, 219}, {468, 130},{477, 381},
- {521, 375}, {266, 384}, {368, 387},
- {200, 374}, {199, 450}, {174, 499}, {521, 375}};
- kontekst = BeginPaint(okno, &paint);
- HPEN pioro = CreatePen(PS_SOLID, 3, RGB(0,0,0));
- HBRUSH pedzel_kolor = CreateSolidBrush(RGB(100,20,50));
- HBRUSH pedzel_inny = CreateSolidBrush(RGB(255,255,0));
- HBRUSH pedzel_czerwony = CreateSolidBrush(RGB(255,0,0));
- HBRUSH pedzel_zielony = CreateSolidBrush(RGB(0,220,0));
- HBRUSH pedzel_niebieski = CreateSolidBrush(RGB(0,0,220));
- SelectObject(kontekst, pioro);
- SelectObject(kontekst, pedzel_czerwony);
- Pie(kontekst, 0,0, 250,250, 175, 0, 75, 0);
- SelectObject(kontekst, pedzel_niebieski);
- Pie(kontekst, 0,0, 250,250, 75, 0, 75, 250);
- SelectObject(kontekst, pedzel_zielony);
- Pie(kontekst, 0,0, 250,250, 75, 250, 175, 250);
- SelectObject(kontekst, pedzel_niebieski);
- Pie(kontekst, 0,0, 250,250, 175, 250, 175, 0);
- SelectObject(kontekst, pedzel_inny);
- Polygon(kontekst, litera, 6);
- SelectObject(kontekst, pedzel_kolor);
- Polygon(kontekst, litera2, 4);
- SelectObject(kontekst, pedzel_czerwony);
- Polygon(kontekst, litera3, 4);
- SelectObject(kontekst, pedzel_zielony);
- SelectObject(kontekst, pedzel_niebieski);
- int delta=3;
- for(int i=0; i<16;i++)
- {
- Ellipse(kontekst, bez[i].x - delta, bez[i].y - delta, bez[i].x + delta, bez[i].y + delta);
- }
- int przesuniecie = 120;
- int podzielnik = 10;
- Ellipse(kontekst, 280+(delta_myszX/podzielnik), 271+delta_myszY/podzielnik, 330+(delta_myszX/podzielnik), 331+delta_myszY/podzielnik);
- Ellipse(kontekst, 280+(delta_myszX/podzielnik)+przesuniecie, 271+(delta_myszY/podzielnik), 330+(delta_myszX/podzielnik)+przesuniecie, 331+(delta_myszY/podzielnik));
- bez[3].x += delta_myszX/podzielnik;
- bez[3].y += delta_myszY/podzielnik;
- bez[6].x += delta_myszX/podzielnik;
- bez[6].y += delta_myszY/podzielnik;
- PolyBezier(kontekst, bez, 16);
- DeleteObject(pioro);
- DeleteObject(pedzel_czerwony);
- DeleteObject(pedzel_niebieski);
- DeleteObject(pedzel_zielony);
- DeleteObject(pedzel_inny);
- EndPaint(okno, &paint);
- return 0;
- }
- case WM_DESTROY: //obowiązkowa obsługa meldunku o zamknięciu okna
- PostQuitMessage (0) ;
- return 0;
- default: //standardowa obsługa pozostałych meldunków
- return DefWindowProc(okno, kod_meldunku, wParam, lParam);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement