All pastes #772496 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-11-13 21:13 UTC
rendered paste body
/******************************************************************
 Grafika komputerowa, środowisko MS Windows - program  przykładowy
 *****************************************************************/

#include <windows.h>

//deklaracja funkcji obslugi okna
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

 int xs=60,ys=30;
 int roz_x=0;
 int roz_y=0;

 //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";

	//Definiujemy klase głównego okna aplikacji
	//Okreslamy tu wlasciwosci okna, szczegoly wygladu oraz
	//adres funkcji przetwarzajacej komunikaty
	nasza_klasa.style         = CS_HREDRAW | CS_VREDRAW;
	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)
	}
	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;
        POINT org;
        POINT brew1[] = {xs+40,ys+30,xs+60,ys,xs+80,ys,xs+100,ys+30};
        POINT brew2[] = {xs+100,ys+30,xs+120,ys,xs+140,ys,xs+160,ys+30};
        POINT policzek1[] = {xs+40,ys+30,xs,ys+80,xs,ys+100,xs+40,ys+110};
        POINT policzek2[] = {xs+160,ys+30,xs+200,ys+80,xs+200,ys+100,xs+160,ys+110};
        POINT broda[] = {xs+40,ys+110,xs+80,ys+130,xs+120,ys+130,xs+160,ys+110};

        bool ruszaj = 0;

/* 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);
		return 0;

	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: Marta Felskowska\nNumer indeksu: 109149", "Autor", MB_OK);
		}
		return 0;
	
	case WM_LBUTTONDOWN: //reakcja na lewy przycisk myszki
		{
			int x = LOWORD(lParam);
			int y = HIWORD(lParam);

                        if (x>=xs && x<=xs+200 && y>=ys && y<=ys+130)
                        {
                                ruszaj = 1;
                                roz_x = x-xs;
                                roz_y = y-ys;

                        }

                        else    ruszaj = 0;




			return 0;
		}

        case WM_MOUSEMOVE: //reakcja na lewy przycisk myszki
		{
			int x = LOWORD(lParam);
			int y = HIWORD(lParam);

                        if (ruszaj)
                        {
                                xs=x-roz_x;
                                ys=x-roz_y;

                        }
                        InvalidateRect(okno, NULL, TRUE);


		}

         case WM_LBUTTONUP: //reakcja na ruch myszki
		{
			ruszaj = 0;

			return 0;
		}



	case WM_PAINT:
		{
			PAINTSTRUCT paint;
			HDC kontekst;

			kontekst = BeginPaint(okno, &paint);

                     	HBRUSH g_brush = CreateSolidBrush(RGB(0,255,0));
                        HBRUSH w_brush = CreateSolidBrush(RGB(255,255,255));
                        HBRUSH b_brush = CreateSolidBrush(RGB(0,0,0));

                        HPEN g_pen = CreatePen(PS_SOLID,3,RGB(0,255,0));
                        HPEN w_pen = CreatePen(PS_SOLID,3,RGB(255,255,255));
                        HPEN b_pen = CreatePen(PS_SOLID,3,RGB(0,0,0));


			SelectObject(kontekst, g_pen);

		        PolyBezier(kontekst,brew1,4);
                        PolyBezier(kontekst,brew2,4);
                        PolyBezier(kontekst,policzek1,4);
                        PolyBezier(kontekst,policzek2,4);
                        PolyBezier(kontekst,broda,4);


                        SelectObject(kontekst, w_pen);
                        SelectObject(kontekst, w_brush);

                        Ellipse (kontekst, 55+xs, 50, 85+xs, 90) ;
                        Ellipse (kontekst, 175, 50, 205, 90) ;

                        SelectObject(kontekst, b_pen);
                        SelectObject(kontekst, b_brush);

                        Ellipse (kontekst, 120, 62, 140, 82) ;
                        Ellipse (kontekst, 180, 62, 200, 82) ;

                        SelectObject(kontekst, g_pen);
                        SelectObject(kontekst, g_brush);

                        Chord (kontekst, 115, 50, 145, 90, 145, 60, 115, 60);
                        Chord (kontekst, 175, 50, 205, 90, 205, 60, 175, 60);




                        DeleteObject(g_pen);
                        DeleteObject(w_pen);
                        DeleteObject(b_pen);
                        DeleteObject(g_brush);
                        DeleteObject(w_brush);
                        DeleteObject(b_brush);

			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);
	}
}