Advertisement
Guest User

Untitled

a guest
Jun 29th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.42 KB | None | 0 0
  1. /************************************************************
  2.  * -- NIE USUWAJ TEJ INFORMACJI Z PROGRAMU ---------------- *
  3.  ************************************************************
  4.  * -- Program powstał na bazie kodu źródłowego ------------ *
  5.  * -- udostępnionego studentom na potrzeby przedmiotu ----- *
  6.  * -- Programowanie Interfejsu Użytkownika ---------------- *
  7.  * -- Copyright (c) 2009 Politechnika Śląska w Gliwicach -- *
  8.  * -- Radosław Sokół, Wydział Elektryczny ----------------- *
  9.  ************************************************************/
  10.  
  11. #include <windows.h>
  12. #include <vector>
  13.  
  14. using std::vector;
  15.  
  16. TCHAR NazwaAplikacji[] = TEXT("Aplikacja studencka");
  17. TCHAR NazwaKlasy[] = TEXT("OKNOGLOWNE");
  18.  
  19. //==============================================================================================
  20. //==============================================================================================
  21.  
  22. class szescian
  23. {
  24.     public:
  25.         szescian(const int X, const int Y, const int H)
  26.         {
  27.             x = 0; y = 0;
  28.             brush[0] = CreateSolidBrush( RGB(238,18,137) );
  29.             brush[1] = CreateSolidBrush( RGB(205,16,118) );
  30.            
  31.             pen = CreatePen( PS_SOLID, 1, RGB(0,0,0) );
  32.            
  33.             y = H*40 - Y*10 - X*10;
  34.            
  35.             x = Y*30 - X*30;
  36.         }
  37.        
  38.         void rysuj(HDC hdc);
  39.        
  40.     private:
  41.    
  42.         HPEN        pen;
  43.         HBRUSH      brush[2];
  44.         POINT       p[3][4];
  45.        
  46.         int         x,y;
  47. };
  48.  
  49. void szescian::rysuj(HDC hdc)
  50. {
  51.     p[0][0].x = -30 + x;
  52.     p[0][0].y = 20 + y;
  53.    
  54.     p[0][1].x = 0 + x;
  55.     p[0][1].y = 10 + y;
  56.    
  57.     p[0][2].x = 0 + x;
  58.     p[0][2].y = -30 + y;
  59.    
  60.     p[0][3].x = -30 + x;
  61.     p[0][3].y = -20 + y;
  62.    
  63.    
  64.     p[1][0].x = 0 + x;
  65.     p[1][0].y = 10 + y;
  66.    
  67.     p[1][1].x = 30 + x;
  68.     p[1][1].y = 20 + y;
  69.    
  70.     p[1][2].x = 30 + x;
  71.     p[1][2].y = -20 + y;
  72.    
  73.     p[1][3].x = 0 + x;
  74.     p[1][3].y = -30 + y;
  75.    
  76.    
  77.     p[2][0].x = -30 + x;
  78.     p[2][0].y = 20 + y;
  79.    
  80.     p[2][1].x = 0 + x;
  81.     p[2][1].y = 10 + y;
  82.    
  83.     p[2][2].x = 30 + x;
  84.     p[2][2].y = 20 + y;
  85.    
  86.     p[2][3].x = 0 + x;
  87.     p[2][3].y = 30 + y;
  88.    
  89.    
  90.     int dc = SaveDC( hdc );
  91.     SelectObject( hdc, pen );
  92.     SelectObject( hdc, brush[1] );
  93.     Polygon( hdc, p[0], 4 );
  94.     SelectObject( hdc, brush[0] );
  95.     Polygon( hdc, p[1], 4 );
  96.     Polygon( hdc, p[2], 4 );
  97.     RestoreDC( hdc, dc );
  98. }
  99.  
  100. //==============================================================================================
  101. void ustawIzotropowo(HWND, HDC);
  102. vector<szescian>    w;
  103. //==============================================================================================
  104.  
  105. static LRESULT CALLBACK FunkcjaOkienkowa(HWND Okno, UINT Komunikat, WPARAM wParam, LPARAM lParam)
  106. {
  107.     switch (Komunikat)
  108.     {
  109.         case WM_PAINT:
  110.         {
  111.             PAINTSTRUCT ps;
  112.             HDC hdc = BeginPaint( Okno, &ps );
  113.             ustawIzotropowo(Okno, hdc);
  114.            
  115.             for(unsigned int i = 0; i < w.size() ; i++)
  116.             {
  117.                 w[i].rysuj( hdc );
  118.             }
  119.            
  120.             EndPaint(Okno, &ps );
  121.         }break;
  122.    
  123.         case WM_DESTROY:
  124.         {
  125.             PostQuitMessage(0);
  126.         }break;
  127.         default:
  128.             return DefWindowProc(Okno, Komunikat, wParam, lParam);
  129.     }return 0;
  130. }
  131.  
  132. //==============================================================================================
  133. //==============================================================================================
  134.  
  135.  
  136. void ustawIzotropowo(HWND hwnd, HDC hdc)
  137. {
  138.     RECT R;
  139.     GetClientRect( hwnd, &R );
  140.    
  141.     POINT Z = { 700, 700 };
  142.    
  143.     SetMapMode( hdc, MM_ISOTROPIC );
  144.     SetWindowExtEx( hdc, Z.x , Z.y , NULL );
  145.     SetViewportExtEx( hdc, R.right, -R.bottom, NULL );
  146.     SetViewportOrgEx( hdc, R.right/2, R.bottom/2, NULL );
  147. }
  148.  
  149. //==============================================================================================
  150. //==============================================================================================
  151.  
  152. static bool RejestrujKlasy()
  153. {
  154.     WNDCLASSEX wc;
  155.     wc.cbSize = sizeof(WNDCLASSEX);
  156.     wc.cbClsExtra = wc.cbWndExtra = 0;
  157.     wc.hbrBackground = (HBRUSH) (0 + COLOR_WINDOW);
  158.     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  159.     wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  160.     wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  161.     wc.hInstance = GetModuleHandle(NULL);
  162.     wc.lpfnWndProc = &FunkcjaOkienkowa;
  163.     wc.lpszClassName = NazwaKlasy;
  164.     wc.lpszMenuName = NULL;
  165.     wc.style = CS_VREDRAW | CS_HREDRAW;
  166.     return (RegisterClassEx(&wc) != 0);
  167. }
  168.  
  169. static void WyrejestrujKlasy()
  170. {
  171.     UnregisterClass(NazwaKlasy, GetModuleHandle(NULL));
  172. }
  173.  
  174. int WINAPI WinMain(HINSTANCE Instancja, HINSTANCE Poprzednia, LPSTR Parametry, int Widocznosc)
  175. {
  176.     //w.push_back( szescian(-1,0,0) );
  177.    
  178.     w.push_back( szescian(0,-3,0) );
  179.    
  180.     w.push_back( szescian(0,-2,0) );
  181.     w.push_back( szescian(0,-1,0) );
  182.     w.push_back( szescian(0,0,0) );
  183.     //w.push_back( szescian(0,0,1) );
  184.     w.push_back( szescian(0,1,0) );
  185.     //w.push_back( szescian(1,0,0) );
  186.    
  187.     w.push_back( szescian(-6,-3,0) );
  188.     w.push_back( szescian(-6,-3,1) );
  189.     w.push_back( szescian(-6,-3,2) );
  190.     w.push_back( szescian(-6,-3,3) );
  191.    
  192.     w.push_back( szescian(-6,-2,0) );
  193.     w.push_back( szescian(-6,-1,0) );
  194.     w.push_back( szescian(-6,0,0) );
  195.    
  196.     w.push_back( szescian(-5,0,0) );
  197.     w.push_back( szescian(-4,0,0) );
  198.     w.push_back( szescian(-3,0,0) );
  199.     w.push_back( szescian(-2,0,-1) );
  200.     w.push_back( szescian(-2,0,0) );
  201.    
  202.    
  203.     w.push_back( szescian(-6,-3,3) );
  204.     w.push_back( szescian(-5,-3,3) );
  205.     w.push_back( szescian(-4,-3,3) );
  206.     w.push_back( szescian(-3,-3,3) );
  207.     w.push_back( szescian(-2,-3,3) );
  208.     w.push_back( szescian(-1,-3,3) );
  209.    
  210.     w.push_back( szescian(0,-3,1) );
  211.     w.push_back( szescian(0,-3,2) );
  212.     w.push_back( szescian(0,-3,3) );
  213.    
  214.     // Zarejestruj klasę. Protestuj, jeżeli wystąpił błąd.
  215.     if (!RejestrujKlasy()) {
  216.         MessageBox(NULL, TEXT("Nie udało się zarejestrować klasy okna!"),
  217.             NazwaAplikacji, MB_ICONSTOP | MB_OK);
  218.         return 1;
  219.     }
  220.     // Stwórz główne okno. Również protestuj, jeżeli wystąpił błąd.
  221.     HWND GlowneOkno = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_CLIENTEDGE,
  222.         NazwaKlasy, TEXT("Okno"), WS_OVERLAPPEDWINDOW,
  223.         CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  224.         NULL, NULL, Instancja, NULL);
  225.     if (GlowneOkno == NULL) {
  226.         MessageBox(NULL, TEXT("Nie udało się stworzyć głównego okna!"),
  227.             NazwaAplikacji, MB_ICONSTOP | MB_OK);
  228.         return 2;
  229.     }
  230.     // Wyświetl i uaktualnij nowo stworzone okno.
  231.     ShowWindow(GlowneOkno, Widocznosc);
  232.     UpdateWindow(GlowneOkno);
  233.     // Główna pętla komunikatów wątku.
  234.     MSG Komunikat;
  235.     while (GetMessage(&Komunikat, NULL, 0, 0) > 0) {
  236.         TranslateMessage(&Komunikat);
  237.         DispatchMessage(&Komunikat);
  238.     }
  239.     // Zwolnij pamięć klas i zakończ proces.
  240.     WyrejestrujKlasy();
  241.     return static_cast<int>(Komunikat.wParam);
  242. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement