Advertisement
Guest User

Untitled

a guest
Nov 14th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.10 KB | None | 0 0
  1. /******************************************************************
  2.  Grafika komputerowa, środowisko MS Windows - program  przykładowy
  3.  *****************************************************************/
  4.  
  5. #include <windows.h>
  6. #include <gdiplus.h>
  7. using namespace Gdiplus;
  8.  
  9. POINT ver1[] = { {500,210}, {515,160}, {585,190}, {620,140} , {630,120}, {730,100}, {780,140} , {800,190}, {830,160}, {840,210} , {640,205}, {685,205}, {500,210} };
  10. bool fDraw = false;
  11. POINT ptPrevious;
  12. HDC hdc;
  13. HWND hwnd;
  14. //deklaracja funkcji obslugi okna
  15. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  16.  
  17. //funkcja Main - dla Windows
  18.  int WINAPI WinMain(HINSTANCE hInstance,
  19.                HINSTANCE hPrevInstance,
  20.                LPSTR     lpCmdLine,
  21.                int       nCmdShow)
  22. {
  23.     MSG meldunek;         //innymi slowy "komunikat"
  24.     WNDCLASS nasza_klasa; //klasa głównego okna aplikacji
  25.     HWND okno;
  26.     static char nazwa_klasy[] = "Podstawowa";
  27.    
  28.     GdiplusStartupInput gdiplusParametry;// parametry GDI+; domyślny konstruktor wypełnia strukturę odpowiednimi wartościami
  29.     ULONG_PTR   gdiplusToken;           // tzw. token GDI+; wartość uzyskiwana przy inicjowaniu i przekazywana do funkcji GdiplusShutdown
  30.    
  31.     // Inicjujemy GDI+.
  32.     GdiplusStartup(&gdiplusToken, &gdiplusParametry, NULL);
  33.  
  34.     //Definiujemy klase głównego okna aplikacji
  35.     //Okreslamy tu wlasciwosci okna, szczegoly wygladu oraz
  36.     //adres funkcji przetwarzajacej komunikaty
  37.     nasza_klasa.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
  38.     nasza_klasa.lpfnWndProc   = WndProc; //adres funkcji realizującej przetwarzanie meldunków
  39.     nasza_klasa.cbClsExtra    = 0 ;
  40.     nasza_klasa.cbWndExtra    = 0 ;
  41.     nasza_klasa.hInstance     = hInstance; //identyfikator procesu przekazany przez MS Windows podczas uruchamiania programu
  42.     nasza_klasa.hIcon         = 0;
  43.     nasza_klasa.hCursor       = LoadCursor(0, IDC_ARROW);
  44.     nasza_klasa.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH);
  45.     nasza_klasa.lpszMenuName  = "Menu" ;
  46.     nasza_klasa.lpszClassName = nazwa_klasy;
  47.  
  48.     //teraz rejestrujemy klasę okna głównego
  49.     RegisterClass (&nasza_klasa);
  50.    
  51.     /*tworzymy okno główne
  52.     okno będzie miało zmienne rozmiary, listwę z tytułem, menu systemowym
  53.     i przyciskami do zwijania do ikony i rozwijania na cały ekran, po utworzeniu
  54.     będzie widoczne na ekranie */
  55.     okno = CreateWindow(nazwa_klasy, "Grafika komputerowa", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
  56.                         CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
  57.    
  58.    
  59.     /* wybór rozmiaru i usytuowania okna pozostawiamy systemowi MS Windows */
  60.     ShowWindow (okno, nCmdShow) ;
  61.    
  62.     //odswiezamy zawartosc okna
  63.     UpdateWindow (okno) ;
  64.  
  65.     // GŁÓWNA PĘTLA PROGRAMU
  66.     while (GetMessage(&meldunek, NULL, 0, 0))
  67.      /* pobranie komunikatu z kolejki; funkcja GetMessage zwraca FALSE tylko dla
  68.      komunikatu WM_QUIT; dla wszystkich pozostałych komunikatów zwraca wartość TRUE */
  69.     {
  70.         TranslateMessage(&meldunek); // wstępna obróbka komunikatu
  71.         DispatchMessage(&meldunek);  // przekazanie komunikatu właściwemu adresatowi (czyli funkcji obslugujacej odpowiednie okno)
  72.     }
  73.  
  74.     GdiplusShutdown(gdiplusToken);
  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.  
  101.     case WM_COMMAND: //reakcje na wybór opcji z menu
  102.         switch (wParam)
  103.         {
  104.         case 100: if(MessageBox(okno, "Zapiszczeć?", "Pisk", MB_YESNO) == IDYES)
  105.                     MessageBeep(0);
  106.                   break;
  107.         case 101: DestroyWindow(okno); //wysylamy meldunek WM_DESTROY
  108.                   break;
  109.         case 200: MessageBox(okno, "Imię i nazwisko:\nNumer indeksu: ", "Autor", MB_OK);
  110.         }
  111.         return 0;
  112.    
  113.  
  114.     case WM_LBUTTONDOWN:
  115.         fDraw = TRUE;
  116.         ptPrevious.x = LOWORD(lParam);
  117.         ptPrevious.y = HIWORD(lParam);
  118.         return 0;
  119.  
  120.     case WM_LBUTTONUP:
  121.         for (int i = 0; i < 13; i++) {
  122.             for (int dx = -3; dx < 4; dx++) {
  123.                 for (int dy = -3; dy < 4; dy++) {
  124.                     if (LOWORD(lParam) == ver1[i].x + dx && HIWORD(lParam) == ver1[i].y + dy) {
  125.                         fDraw = true;
  126.                     }
  127.                        
  128.                        
  129.                        
  130.                 }
  131.             }
  132.         }
  133.         if (fDraw)
  134.         {
  135.             hdc = GetDC(hwnd);
  136.             MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL);
  137.             LineTo(hdc, LOWORD(lParam), HIWORD(lParam));
  138.             ReleaseDC(hwnd, hdc);
  139.         }
  140.         fDraw = FALSE;
  141.         return 0;
  142.  
  143.     case WM_MOUSEMOVE:
  144.         if (fDraw)
  145.         {
  146.            
  147.         }
  148.         return 0;
  149.  
  150.     case WM_PAINT:
  151.         {
  152.             PAINTSTRUCT paint;
  153.             HDC kontekst;
  154.  
  155.             kontekst = BeginPaint(okno, &paint);
  156.        
  157.             // MIEJSCE NA KOD GDI
  158.  
  159.             HBRUSH oldbrush = (HBRUSH)SelectObject(kontekst, GetStockObject(NULL_BRUSH)); //stworzenie nowego p?dzla i
  160.                                                             //przypisanie do niego "starego" p?dzla i za razem wybranie nowego pustego p?dzla
  161.  
  162.             HBRUSH brsh = CreateSolidBrush(RGB(160, 28, 30));   //Wybranie koloru pędzla
  163.             SelectObject(kontekst, brsh);                       //przypisanie pędzla
  164.             Pie(kontekst,0, 40, 300, 340, 170, 170, 0, 190);    //Narysowanie wycinka koła
  165.             DeleteObject(brsh);                            
  166.             HBRUSH brsh2 = CreateSolidBrush(RGB(50,255,50));
  167.             SelectObject(kontekst, brsh2);
  168.             Pie(kontekst,0, 40, 300, 340, 170, 200, 170, 170);
  169.             DeleteObject(brsh2);
  170.             HBRUSH brsh3 = CreateSolidBrush(RGB(50, 50, 250));
  171.             SelectObject(kontekst, brsh3);
  172.             Pie(kontekst,0, 40, 300, 340, 0, 190, 170, 200);
  173.             DeleteObject(brsh3);
  174.             SelectObject(kontekst, GetStockObject(NULL_BRUSH)); //usunięcie pędzla
  175.  
  176.             //rysowanie kola
  177.             HPEN pioro = CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
  178.             SelectObject(kontekst, pioro);
  179.             Ellipse(kontekst, 0, 40, 300, 340);
  180.             DeleteObject(pioro);
  181.  
  182.  
  183.             //rysowanie litery
  184.             HBRUSH E = CreateSolidBrush(RGB(30, 30, 30));
  185.             HPEN pioro2 = CreatePen(PS_SOLID, 3, RGB(150, 150, 150));
  186.             SelectObject(kontekst, E);
  187.             SelectObject(kontekst, pioro2);
  188.            
  189.             POINT vertices[] = { {80, 100}, {200, 100}, {200, 130}, {130,130}, {130,170}, {170, 170},{170,200}, {130,200}, {130,260},{200, 260}, {200, 290}, {80,290} };
  190.             Polygon(kontekst, vertices, sizeof(vertices) / sizeof(vertices[0]));
  191.             DeleteObject(E);
  192.             DeleteObject(pioro2);
  193.  
  194.             //rysowanie krzywej beziera
  195.             HPEN pioro3 = CreatePen(PS_SOLID, 3, RGB(30,30,30));
  196.             SelectObject(kontekst, pioro3);
  197.             PolyBezier(kontekst, ver1, 13);
  198.  
  199.             Ellipse(kontekst, 530, 197, 580, 247);
  200.             Ellipse(kontekst, 810, 197, 760, 247);
  201.             DeleteObject(pioro3);
  202.             HPEN pioro4 = CreatePen(PS_SOLID, 2, RGB(255,255,153));
  203.             SelectObject(kontekst, pioro4);
  204.             for (int i = 0; i < 13; i++) {
  205.                 int x = ver1[i].x;
  206.                 int y = ver1[i].y;
  207.                 Ellipse(kontekst, x - 2, y - 2, x + 2, y + 2);
  208.             }
  209.  
  210.  
  211.             // utworzenie obiektu umożliwiającego rysowanie przy użyciu GDI+
  212.             // (od tego momentu nie można używać funkcji GDI
  213.             Graphics grafika(kontekst);
  214.            
  215.             // MIEJSCE NA KOD GDI+
  216.  
  217.            
  218.             // utworzenie czcionki i wypisanie tekstu na ekranie
  219.             //FontFamily  fontFamily(L"Times New Roman");
  220.             //Font        font(&fontFamily, 24, FontStyleRegular, UnitPixel);
  221.             //PointF      pointF(100.0f, 400.0f);
  222.             //SolidBrush  solidBrush(Color(255, 0, 0, 255));
  223.             //grafika.DrawString(L"To jest tekst napisany za pomocą GDI+.", -1, &font, pointF, &solidBrush);
  224.  
  225.             EndPaint(okno, &paint);
  226.  
  227.             return 0;
  228.         }
  229.    
  230.     case WM_DESTROY: //obowiązkowa obsługa meldunku o zamknięciu okna
  231.         PostQuitMessage (0) ;
  232.         return 0;
  233.    
  234.     default: //standardowa obsługa pozostałych meldunków
  235.         return DefWindowProc(okno, kod_meldunku, wParam, lParam);
  236.     }
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement