Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
BibTeX 7.48 KB | None | 0 0
  1. /******************************************************************
  2.  Grafika komputerowa, środowisko MS Windows - program  przykładowy
  3.  *****************************************************************/
  4.  
  5. #include <windows.h>
  6.  
  7. //deklaracja funkcji obslugi okna
  8. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  9.  
  10. POINT litera[] = {{77, 62}, {36, 64}, {36, 146}, {35, 205}, {164, 206}, {163, 66}};
  11. POINT litera2[] = {{58,91}, {58,184}, {139,182}, {134, 91}};
  12. POINT litera3[] = {{78,43}, {108,44}, {120,14}, {93,16}};
  13.  
  14.  
  15. int delta_myszX=0;
  16. int delta_myszY=0;
  17.  
  18. bool klik = false;
  19. bool unklik = false;
  20.  
  21. int staraMyszX=0;
  22. int staraMyszY=0;
  23.  
  24. //funkcja Main - dla Windows
  25.  int WINAPI WinMain(HINSTANCE hInstance,
  26.                HINSTANCE hPrevInstance,
  27.                LPSTR     lpCmdLine,
  28.                int       nCmdShow)
  29. {
  30.  
  31.     MSG meldunek;         //innymi slowy "komunikat"
  32.     WNDCLASS nasza_klasa; //klasa głównego okna aplikacji
  33.     HWND okno;
  34.     static char nazwa_klasy[] = "Podstawowa";
  35.  
  36.     //Definiujemy klase głównego okna aplikacji
  37.     //Okreslamy tu wlasciwosci okna, szczegoly wygladu oraz
  38.     //adres funkcji przetwarzajacej komunikaty
  39.     nasza_klasa.style         = CS_HREDRAW | CS_VREDRAW;
  40.     nasza_klasa.lpfnWndProc   = WndProc; //adres funkcji realizującej przetwarzanie meldunków
  41.     nasza_klasa.cbClsExtra    = 0 ;
  42.     nasza_klasa.cbWndExtra    = 0 ;
  43.     nasza_klasa.hInstance     = hInstance; //identyfikator procesu przekazany przez MS Windows podczas uruchamiania programu
  44.     nasza_klasa.hIcon         = 0;
  45.     nasza_klasa.hCursor       = LoadCursor(0, IDC_ARROW);
  46.     nasza_klasa.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH);
  47.     nasza_klasa.lpszMenuName  = "Menu" ;
  48.     nasza_klasa.lpszClassName = nazwa_klasy;
  49.  
  50.    //teraz rejestrujemy klasę okna głównego
  51.    RegisterClass (&nasza_klasa);
  52.    
  53.     /*tworzymy okno główne
  54.     okno będzie miało zmienne rozmiary, listwę z tytułem, menu systemowym
  55.     i przyciskami do zwijania do ikony i rozwijania na cały ekran, po utworzeniu
  56.     będzie widoczne na ekranie */
  57.     okno = CreateWindow(nazwa_klasy, "Grafika komputerowa", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
  58.                         CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
  59.    
  60.    
  61.     /* wybór rozmiaru i usytuowania okna pozostawiamy systemowi MS Windows */
  62.     ShowWindow (okno, nCmdShow) ;
  63.    
  64.     //odswiezamy zawartosc okna
  65.     UpdateWindow (okno) ;
  66.     SetTimer(okno, 1, 100, 0);
  67.  
  68.     // GŁÓWNA PĘTLA PROGRAMU
  69.     while (GetMessage(&meldunek, NULL, 0, 0))
  70.     /* pobranie komunikatu z kolejki; funkcja GetMessage zwraca FALSE tylko dla
  71.      komunikatu wm_Quit; dla wszystkich pozostałych komunikatów zwraca wartość TRUE */
  72.     {
  73.         TranslateMessage(&meldunek); // wstępna obróbka komunikatu
  74.         DispatchMessage(&meldunek);  // przekazanie komunikatu właściwemu adresatowi (czyli funkcji obslugujacej odpowiednie okno)
  75.     }
  76.     return (int)meldunek.wParam;
  77. }
  78.  
  79. /********************************************************************
  80. FUNKCJA OKNA realizujaca przetwarzanie meldunków kierowanych do okna aplikacji*/
  81. LRESULT CALLBACK WndProc (HWND okno, UINT kod_meldunku, WPARAM wParam, LPARAM lParam)
  82. {
  83.     HMENU mPlik, mInfo, mGlowne;
  84.        
  85. /* PONIŻSZA INSTRUKCJA DEFINIUJE REAKCJE APLIKACJI NA POSZCZEGÓLNE MELDUNKI */
  86.     switch (kod_meldunku)
  87.     {
  88.     case WM_CREATE:  //meldunek wysyłany w momencie tworzenia okna
  89.         mPlik = CreateMenu();
  90.         AppendMenu(mPlik, MF_STRING, 100, "&Zapiszcz...");
  91.         AppendMenu(mPlik, MF_SEPARATOR, 0, "");
  92.         AppendMenu(mPlik, MF_STRING, 101, "&Koniec");
  93.         mInfo = CreateMenu();
  94.         AppendMenu(mInfo, MF_STRING, 200, "&Autor...");
  95.         mGlowne = CreateMenu();
  96.         AppendMenu(mGlowne, MF_POPUP, (UINT_PTR) mPlik, "&Plik");
  97.         AppendMenu(mGlowne, MF_POPUP, (UINT_PTR) mInfo, "&Informacja");
  98.         SetMenu(okno, mGlowne);
  99.         DrawMenuBar(okno);
  100.         return 0;
  101.  
  102.     case WM_COMMAND: //reakcje na wybór opcji z menu
  103.         switch (wParam)
  104.         {
  105.         case 100: if(MessageBox(okno, "Zapiszczeć?", "Pisk", MB_YESNO) == IDYES)
  106.                     MessageBeep(0);
  107.                  break;
  108.         case 101: DestroyWindow(okno); //wysylamy meldunek WM_DESTROY
  109.                   break;
  110.         case 200: MessageBox(okno, "Imię i nazwisko:\nNumer indeksu: ", "Autor", MB_OK);
  111.         }
  112.         return 0;
  113.    
  114.     case WM_LBUTTONDOWN: //reakcja na lewy przycisk myszki
  115.         {
  116.             int x = LOWORD(lParam);
  117.             int y = HIWORD(lParam);
  118.            
  119.             if(klik==false)
  120.             {
  121.                 staraMyszX=280+60;
  122.                 staraMyszY=300;
  123.                 delta_myszX=x - staraMyszX;
  124.                 delta_myszY=y - staraMyszY;
  125.                 klik=true;
  126.             }
  127.             InvalidateRect(okno, 0, TRUE);
  128.             return 0;
  129.         }
  130.     case WM_MOUSEMOVE:
  131.         {
  132.             int x = LOWORD(lParam);
  133.             int y = HIWORD(lParam);
  134.             if(klik==true)
  135.             {
  136.                 delta_myszX=x - staraMyszX;
  137.                 delta_myszY=y - staraMyszY;
  138.                 InvalidateRect(okno, 0, TRUE);
  139.             }
  140.            
  141.             return 0;
  142.         }
  143.     case WM_LBUTTONUP: //reakcja na lewy przycisk myszki
  144.         {
  145.             int x = LOWORD(lParam);
  146.             int y = HIWORD(lParam);
  147.             klik=false;
  148.             staraMyszX=280+60;
  149.             staraMyszY=300;
  150.             return 0;
  151.         }
  152.    
  153.  
  154.     case WM_PAINT:
  155.         {
  156.             PAINTSTRUCT paint;
  157.             HDC kontekst;
  158.  
  159.             POINT bez[]={{200,374}, {261, 371}, {265, 175},
  160.             {317, 220}, {332, 306}, {398, 306},
  161.             {427, 219}, {468, 130},{477, 381},
  162.             {521, 375}, {266, 384}, {368, 387},
  163.             {200, 374}, {199, 450}, {174, 499}, {521, 375}};
  164.  
  165.            
  166.  
  167.             kontekst = BeginPaint(okno, &paint);
  168.  
  169.             HPEN pioro = CreatePen(PS_SOLID, 3, RGB(0,0,0));
  170.             HBRUSH pedzel_kolor = CreateSolidBrush(RGB(100,20,50));
  171.             HBRUSH pedzel_inny = CreateSolidBrush(RGB(255,255,0));
  172.             HBRUSH pedzel_czerwony = CreateSolidBrush(RGB(255,0,0));
  173.             HBRUSH pedzel_zielony = CreateSolidBrush(RGB(0,220,0));
  174.             HBRUSH pedzel_niebieski = CreateSolidBrush(RGB(0,0,220));
  175.  
  176.             SelectObject(kontekst, pioro);
  177.             SelectObject(kontekst, pedzel_czerwony);
  178.             Pie(kontekst, 0,0, 250,250, 175, 0, 75, 0);
  179.             SelectObject(kontekst, pedzel_niebieski);
  180.             Pie(kontekst, 0,0, 250,250, 75, 0, 75, 250);
  181.             SelectObject(kontekst, pedzel_zielony);
  182.             Pie(kontekst, 0,0, 250,250, 75, 250, 175, 250);
  183.             SelectObject(kontekst, pedzel_niebieski);
  184.             Pie(kontekst, 0,0, 250,250, 175, 250, 175, 0)
  185.            
  186.             SelectObject(kontekst, pedzel_inny);
  187.             Polygon(kontekst, litera, 6);
  188.             SelectObject(kontekst, pedzel_kolor);
  189.             Polygon(kontekst, litera2, 4);
  190.             SelectObject(kontekst, pedzel_czerwony);
  191.             Polygon(kontekst, litera3, 4);
  192.  
  193.             SelectObject(kontekst, pedzel_zielony);
  194.            
  195.  
  196.             SelectObject(kontekst, pedzel_niebieski);
  197.             int delta=3;
  198.             for(int i=0; i<16;i++)
  199.             {              
  200.                 Ellipse(kontekst, bez[i].x - delta, bez[i].y - delta, bez[i].x + delta, bez[i].y + delta);
  201.             }
  202.             int przesuniecie = 120;
  203.             int podzielnik = 10;
  204.             Ellipse(kontekst, 280+(delta_myszX/podzielnik), 271+delta_myszY/podzielnik, 330+(delta_myszX/podzielnik), 331+delta_myszY/podzielnik);
  205.             Ellipse(kontekst, 280+(delta_myszX/podzielnik)+przesuniecie, 271+(delta_myszY/podzielnik), 330+(delta_myszX/podzielnik)+przesuniecie, 331+(delta_myszY/podzielnik));
  206.            
  207.             bez[3].x += delta_myszX/podzielnik;
  208.             bez[3].y += delta_myszY/podzielnik;
  209.             bez[6].x += delta_myszX/podzielnik;
  210.             bez[6].y += delta_myszY/podzielnik;
  211.  
  212.  
  213.             PolyBezier(kontekst, bez, 16);
  214.  
  215.             DeleteObject(pioro);
  216.             DeleteObject(pedzel_czerwony);
  217.             DeleteObject(pedzel_niebieski);
  218.             DeleteObject(pedzel_zielony);
  219.             DeleteObject(pedzel_inny);
  220.            
  221.  
  222.             EndPaint(okno, &paint);
  223.  
  224.             return 0;
  225.         }
  226.    
  227.     case WM_DESTROY: //obowiązkowa obsługa meldunku o zamknięciu okna
  228.         PostQuitMessage (0) ;
  229.         return 0;
  230.    
  231.     default: //standardowa obsługa pozostałych meldunków
  232.         return DefWindowProc(okno, kod_meldunku, wParam, lParam);
  233.     }
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement