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>
- #include <gdiplus.h>
- using namespace Gdiplus;
- //deklaracja funkcji obslugi okna
- LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
- //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";
- GdiplusStartupInput gdiplusParametry;// parametry GDI+; domyślny konstruktor wypełnia strukturę odpowiednimi wartościami
- ULONG_PTR gdiplusToken; // tzw. token GDI+; wartość uzyskiwana przy inicjowaniu i przekazywana do funkcji GdiplusShutdown
- // Inicjujemy GDI+.
- GdiplusStartup(&gdiplusToken, &gdiplusParametry, NULL);
- //Definiujemy klase głównego okna aplikacji
- //Okreslamy tu wlasciwosci okna, szczegoly wygladu oraz
- //adres funkcji przetwarzajacej komunikaty
- nasza_klasa.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
- 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) ;
- // 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)
- }
- GdiplusShutdown(gdiplusToken);
- 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;
- static bool moving = false;
- static int movingi = 0;
- static POINT pkt_bezier[] = { { 300, 300 }, { 300, 250 }, { 300, 250 }, { 400, 250 },
- { 450, 250 }, { 400, 200 }, { 530, 200 },
- { 600, 200 }, { 600, 250 }, { 670, 270 },
- { 670, 320 }, { 300, 320 }, { 300, 300 }, };
- /* 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);
- 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);
- int selected = -1;
- for (int i = 0; i < sizeof(pkt_bezier) / sizeof(POINT); i++)
- {
- if (x<(pkt_bezier[i].x + 5 )&& x>(pkt_bezier[i].x - 5) && y<(pkt_bezier[i].y + 5) && y>(pkt_bezier[i].y - 5))
- {
- selected = i;
- break;
- }
- }
- if (selected == -1)
- return 0;
- movingi = selected;
- moving = true;
- return 0;
- }
- case WM_LBUTTONUP:
- {
- int x = LOWORD(lParam);
- int y = HIWORD(lParam);
- if (moving)
- {
- pkt_bezier[movingi].x = x;
- pkt_bezier[movingi].y = y;
- moving = false;
- }
- InvalidateRect(okno, NULL, true);
- return 0;
- }
- case WM_MOUSEMOVE:
- {
- int x = LOWORD(lParam);
- int y = HIWORD(lParam);
- if (moving)
- {
- pkt_bezier[movingi].x = x;
- pkt_bezier[movingi].y = y;
- InvalidateRect(okno, NULL, true);
- }
- return 0;
- }
- /*POINT pkt_bezier[] = { { 300, 300 }, { 300, 250 }, { 300, 250 }, { 400, 250 },
- { 450, 250 }, { 400, 200 }, { 530, 200 },
- { 600, 200 }, { 600, 250 }, { 670, 270 },
- { 670, 320 }, { 300, 320 }, { 300, 300 }, };
- */
- case WM_PAINT:
- {
- PAINTSTRUCT paint;
- HDC kontekst;
- float x = 0.5;
- float y = 0.5;
- int offx = -120;
- int offy = -134;
- POINT pkt[] = { { offx + 500 * x, offy + 500 * y }, { offx + 530 * x, offy + 500 * y }, { offx + 520 * x, offy + 510 * y }, { offx + 520 * x, offy + 550 * y }, { offx + 560 * x, offy + 500 * y }, { offx + 580 * x, offy + 500 * y }, { offx + 520 * x, offy + 570 * y }, { offx + 500 * x, offy + 570 * y } };
- POINT pkt2[] = { { offx + 500 * x, offy + 570 * y }, { offx + 500 * x, offy + 650 * y }, { offx + 520 * x, offy + 650 * y }, { offx + 520 * x, offy + 595 * y }, { offx + 560 * x, offy + 650 * y }, { offx + 580 * x, offy + 650 * y }, { offx + 520 * x, offy + 570 * y } };
- kontekst = BeginPaint(okno, &paint);
- // MIEJSCE NA KOD GDI
- HPEN pioro = CreatePen(PS_SOLID, 1, RGB(255,0,0));
- SelectObject(kontekst, pioro);
- HBRUSH pedzel = CreateSolidBrush(RGB(100, 100, 100));
- SelectObject(kontekst, pedzel);
- Pie(kontekst, 100, 100, 200, 200, 70, 100, 100, 170);
- DeleteObject(pedzel);
- pedzel = CreateSolidBrush(RGB(255, 100, 255));
- SelectObject(kontekst, pedzel);
- Pie(kontekst, 100, 100, 200, 200, 200, 170, 200, 70);
- DeleteObject(pedzel);
- pedzel = CreateSolidBrush(RGB(100, 255, 255));
- SelectObject(kontekst, pedzel);
- Pie(kontekst, 100, 100, 200, 200, 200, 130, 100, 130);
- DeleteObject(pedzel);
- pedzel = CreateSolidBrush(RGB(0, 200, 100));
- SelectObject(kontekst, pedzel);
- Pie(kontekst, 100, 100, 200, 200, 100, 170, 200, 170);
- DeleteObject(pedzel);
- pedzel = CreateSolidBrush(RGB(255, 100, 0));
- SelectObject(kontekst, pedzel);
- Polygon(kontekst, pkt, sizeof(pkt) / sizeof(POINT));
- DeleteObject(pedzel);
- pedzel = CreateSolidBrush(RGB(255, 100, 100));
- SelectObject(kontekst, pedzel);
- Polygon(kontekst, pkt2, sizeof(pkt2) / sizeof(POINT));
- DeleteObject(pedzel);
- /*
- MoveToEx(kontekst, 500, 500, NULL);
- LineTo(kontekst, 530, 500);
- LineTo(kontekst, 520, 510);
- LineTo(kontekst, 520, 550);
- LineTo(kontekst, 560, 500);
- LineTo(kontekst, 580, 500);
- LineTo(kontekst, 520, 570);
- LineTo(kontekst, 590, 630);
- */
- //3*luk+1
- // 13
- pedzel = CreateSolidBrush(RGB(100, 255, 100));
- SelectObject(kontekst, CreateSolidBrush(RGB(100, 255, 100)));
- for (int i = 0; i < sizeof(pkt_bezier) / sizeof(POINT); i++)
- {
- Ellipse(kontekst, pkt_bezier[i].x - 5, pkt_bezier[i].y - 5, pkt_bezier[i].x + 5, pkt_bezier[i].y + 5);
- }
- DeleteObject(pedzel);
- pedzel = CreateSolidBrush(RGB(100, 100, 100));
- SelectObject(kontekst, CreateSolidBrush(RGB(100, 100, 100)));
- PolyBezier(kontekst, pkt_bezier, 13);
- Ellipse(kontekst, 330, 290, 380, 340);
- Ellipse(kontekst, 570, 290, 620, 340);
- DeleteObject(pedzel);
- DeleteObject(pioro);
- // utworzenie obiektu umożliwiającego rysowanie przy użyciu GDI+
- // (od tego momentu nie można używać funkcji GDI
- Graphics grafika(kontekst);
- // MIEJSCE NA KOD GDI+
- // utworzenie czcionki i wypisanie tekstu na ekranie
- FontFamily fontFamily(L"Times New Roman");
- Font font(&fontFamily, 24, FontStyleRegular, UnitPixel);
- PointF pointF(100.0f, 400.0f);
- SolidBrush solidBrush(Color(255, 0, 0, 255));
- //grafika.DrawString(L"To jest tekst napisany za pomocą GDI+.", -1, &font, pointF, &solidBrush);
- 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