Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /************************************************************
- * -- NIE USUWAJ TEJ INFORMACJI Z PROGRAMU ---------------- *
- ************************************************************
- * -- Program powstał na bazie kodu źródłowego ------------ *
- * -- udostępnionego studentom na potrzeby przedmiotu ----- *
- * -- Programowanie Interfejsu Użytkownika ---------------- *
- * -- Copyright (c) 2009 Politechnika Śląska w Gliwicach -- *
- * -- Radosław Sokół, Wydział Elektryczny ----------------- *
- ************************************************************/
- #include <windows.h>
- #include <vector>
- using std::vector;
- TCHAR NazwaAplikacji[] = TEXT("Aplikacja studencka");
- TCHAR NazwaKlasy[] = TEXT("OKNOGLOWNE");
- //==============================================================================================
- //==============================================================================================
- class szescian
- {
- public:
- szescian(const int X, const int Y, const int H)
- {
- x = 0; y = 0;
- brush[0] = CreateSolidBrush( RGB(238,18,137) );
- brush[1] = CreateSolidBrush( RGB(205,16,118) );
- pen = CreatePen( PS_SOLID, 1, RGB(0,0,0) );
- y = H*40 - Y*10 - X*10;
- x = Y*30 - X*30;
- }
- void rysuj(HDC hdc);
- private:
- HPEN pen;
- HBRUSH brush[2];
- POINT p[3][4];
- int x,y;
- };
- void szescian::rysuj(HDC hdc)
- {
- p[0][0].x = -30 + x;
- p[0][0].y = 20 + y;
- p[0][1].x = 0 + x;
- p[0][1].y = 10 + y;
- p[0][2].x = 0 + x;
- p[0][2].y = -30 + y;
- p[0][3].x = -30 + x;
- p[0][3].y = -20 + y;
- p[1][0].x = 0 + x;
- p[1][0].y = 10 + y;
- p[1][1].x = 30 + x;
- p[1][1].y = 20 + y;
- p[1][2].x = 30 + x;
- p[1][2].y = -20 + y;
- p[1][3].x = 0 + x;
- p[1][3].y = -30 + y;
- p[2][0].x = -30 + x;
- p[2][0].y = 20 + y;
- p[2][1].x = 0 + x;
- p[2][1].y = 10 + y;
- p[2][2].x = 30 + x;
- p[2][2].y = 20 + y;
- p[2][3].x = 0 + x;
- p[2][3].y = 30 + y;
- int dc = SaveDC( hdc );
- SelectObject( hdc, pen );
- SelectObject( hdc, brush[1] );
- Polygon( hdc, p[0], 4 );
- SelectObject( hdc, brush[0] );
- Polygon( hdc, p[1], 4 );
- Polygon( hdc, p[2], 4 );
- RestoreDC( hdc, dc );
- }
- //==============================================================================================
- void ustawIzotropowo(HWND, HDC);
- vector<szescian> w;
- //==============================================================================================
- static LRESULT CALLBACK FunkcjaOkienkowa(HWND Okno, UINT Komunikat, WPARAM wParam, LPARAM lParam)
- {
- switch (Komunikat)
- {
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- HDC hdc = BeginPaint( Okno, &ps );
- ustawIzotropowo(Okno, hdc);
- for(unsigned int i = 0; i < w.size() ; i++)
- {
- w[i].rysuj( hdc );
- }
- EndPaint(Okno, &ps );
- }break;
- case WM_DESTROY:
- {
- PostQuitMessage(0);
- }break;
- default:
- return DefWindowProc(Okno, Komunikat, wParam, lParam);
- }return 0;
- }
- //==============================================================================================
- //==============================================================================================
- void ustawIzotropowo(HWND hwnd, HDC hdc)
- {
- RECT R;
- GetClientRect( hwnd, &R );
- POINT Z = { 700, 700 };
- SetMapMode( hdc, MM_ISOTROPIC );
- SetWindowExtEx( hdc, Z.x , Z.y , NULL );
- SetViewportExtEx( hdc, R.right, -R.bottom, NULL );
- SetViewportOrgEx( hdc, R.right/2, R.bottom/2, NULL );
- }
- //==============================================================================================
- //==============================================================================================
- static bool RejestrujKlasy()
- {
- WNDCLASSEX wc;
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.cbClsExtra = wc.cbWndExtra = 0;
- wc.hbrBackground = (HBRUSH) (0 + COLOR_WINDOW);
- 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_VREDRAW | CS_HREDRAW;
- return (RegisterClassEx(&wc) != 0);
- }
- static void WyrejestrujKlasy()
- {
- UnregisterClass(NazwaKlasy, GetModuleHandle(NULL));
- }
- int WINAPI WinMain(HINSTANCE Instancja, HINSTANCE Poprzednia, LPSTR Parametry, int Widocznosc)
- {
- //w.push_back( szescian(-1,0,0) );
- w.push_back( szescian(0,-3,0) );
- w.push_back( szescian(0,-2,0) );
- w.push_back( szescian(0,-1,0) );
- w.push_back( szescian(0,0,0) );
- //w.push_back( szescian(0,0,1) );
- w.push_back( szescian(0,1,0) );
- //w.push_back( szescian(1,0,0) );
- w.push_back( szescian(-6,-3,0) );
- w.push_back( szescian(-6,-3,1) );
- w.push_back( szescian(-6,-3,2) );
- w.push_back( szescian(-6,-3,3) );
- w.push_back( szescian(-6,-2,0) );
- w.push_back( szescian(-6,-1,0) );
- w.push_back( szescian(-6,0,0) );
- w.push_back( szescian(-5,0,0) );
- w.push_back( szescian(-4,0,0) );
- w.push_back( szescian(-3,0,0) );
- w.push_back( szescian(-2,0,-1) );
- w.push_back( szescian(-2,0,0) );
- w.push_back( szescian(-6,-3,3) );
- w.push_back( szescian(-5,-3,3) );
- w.push_back( szescian(-4,-3,3) );
- w.push_back( szescian(-3,-3,3) );
- w.push_back( szescian(-2,-3,3) );
- w.push_back( szescian(-1,-3,3) );
- w.push_back( szescian(0,-3,1) );
- w.push_back( szescian(0,-3,2) );
- w.push_back( szescian(0,-3,3) );
- // 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 GlowneOkno = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_CLIENTEDGE,
- NazwaKlasy, TEXT("Okno"), WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
- NULL, NULL, Instancja, NULL);
- if (GlowneOkno == 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(GlowneOkno, Widocznosc);
- UpdateWindow(GlowneOkno);
- // 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 static_cast<int>(Komunikat.wParam);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement