Esempio n. 1
0
/********************************************************************
FUNKCJA OKNA realizujaca przetwarzanie meldunków kierowanych do okna aplikacji*/
LRESULT CALLBACK WndProc (HWND okno, UINT kod_meldunku, WPARAM wParam, LPARAM lParam)
{
	    	
    // PONI¯SZA INSTRUKCJA DEFINIUJE REAKCJE APLIKACJI NA POSZCZEGÓLNE MELDUNKI 
	KlawiszologiaSterowania(kod_meldunku, wParam, lParam);

	switch (kod_meldunku) 
	{
	case WM_CREATE:  //meldunek wysy³any w momencie tworzenia okna
		{
			
			g_context = GetDC(okno);

			srand( (unsigned)time( NULL ) );
            int wynik = InicjujGrafike(g_context);
			if (wynik == 0)
			{
				printf("nie udalo sie otworzyc okna graficznego\n");
				//exit(1);
			}

			PoczatekInterakcji();

			SetTimer(okno, 1, 10, NULL);
						
			return 0;
		}
	case WM_KEYDOWN:
    {
      switch (LOWORD(wParam))
      {
        case VK_F1:  // wywolanie systemu pomocy
        {
          char lan[1024],lan_bie[1024];
          //GetSystemDirectory(lan_sys,1024);
          GetCurrentDirectory(1024,lan_bie);
          strcpy(lan,"C:\\Program Files\\Internet Explorer\\iexplore ");
          strcat(lan,lan_bie);
          strcat(lan,"\\pomoc.htm");
          int wyni = WinExec(lan,SW_NORMAL);
          if (wyni < 32)  // proba uruchominia pomocy nie powiodla sie
          {
            strcpy(lan,"C:\\Program Files\\Mozilla Firefox\\firefox ");
            strcat(lan,lan_bie);
            strcat(lan,"\\pomoc.htm");
            wyni = WinExec(lan,SW_NORMAL);
            if (wyni < 32)
            {
              char lan_win[1024];
              GetWindowsDirectory(lan_win,1024);
              strcat(lan_win,"\\notepad pomoc.txt ");
              wyni = WinExec(lan_win,SW_NORMAL);
            }
          }
          break;
        }
      case VK_ESCAPE:   // wyjœcie z programu
        {
          SendMessage(okno, WM_DESTROY,0,0);
          break;
        }
      }
      return 0;
    }
       
	case WM_PAINT:
		{
			PAINTSTRUCT paint;
			HDC kontekst;
			kontekst = BeginPaint(okno, &paint);
		
			RysujScene();			
			SwapBuffers(kontekst);

			EndPaint(okno, &paint);

			

			return 0;
		}

	case WM_TIMER:
       Cykl_WS();
	     InvalidateRect(okno, NULL, FALSE);

	    return 0;

  case WM_SIZE:
		{
			int cx = LOWORD(lParam);
			int cy = HIWORD(lParam);

			ZmianaRozmiaruOkna(cx,cy);
			
			return 0;
		}
  	
	case WM_DESTROY: //obowi¹zkowa obs³uga meldunku o zamkniêciu okna
    if (lParam == 100)
      MessageBox(okno,"Jest zbyt póŸno na do³¹czenie do wirtualnego œwiata. Trzeba to zrobiæ zanim inni uczestnicy zmieni¹ jego stan.","Zamkniêcie programu",MB_OK);  

		ZakonczenieInterakcji();

		ZakonczenieGrafiki();


		ReleaseDC(okno, g_context);
		KillTimer(okno, 1);



		PostQuitMessage (0) ;
		return 0;
    
	default: //standardowa obs³uga pozosta³ych meldunków
		return DefWindowProc(okno, kod_meldunku, wParam, lParam);
	}
	
	
}
Esempio n. 2
0
LRESULT COknoGL::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    long wynik = COkno::WndProc(hWnd,message,wParam,lParam);

    switch(message)
    {
    case WM_CREATE: //utworzenie okna
        InitWGL(hWnd);
        UstawienieSceny(false);
        break;
    case WM_SIZE:
        UstawienieSceny(false);
        break;
    case WM_PAINT:
        RysujScene();
        ValidateRect(hWnd,NULL);
        break;
    case WM_DESTROY:
        UsunWGL();
        break;
    }

    if(kontrolaKameryPrzezUzytkownika)
    {
        switch(message)
        {
        case WM_RBUTTONDOWN:
            poczatkowaPozycjaKursoraMyszy.x = LOWORD(lParam);
            poczatkowaPozycjaKursoraMyszy.y = HIWORD(lParam);
            break;
        case WM_MOUSEMOVE:
            if (wParam & MK_RBUTTON)
            {
                POINT biezacaPozycjaKursoraMyszy = {LOWORD(lParam),HIWORD(lParam)};
                POINT przesuniecieKursoraMyszy=
                {   biezacaPozycjaKursoraMyszy.x - poczatkowaPozycjaKursoraMyszy.x,
                    biezacaPozycjaKursoraMyszy.y - poczatkowaPozycjaKursoraMyszy.y
                };

                if(przesuniecieKursoraMyszy.x == 0 && przesuniecieKursoraMyszy.y == 0) break;

                const float czuloscMyszy=5.0f;
                kameraCelPhi += przesuniecieKursoraMyszy.x/czuloscMyszy;
                float zmianaCelTheta = przesuniecieKursoraMyszy.y/czuloscMyszy;
                if(fabs(kameraCelTheta+zmianaCelTheta)<90) kameraCelTheta += zmianaCelTheta;

                poczatkowaPozycjaKursoraMyszy.x = LOWORD(lParam);
                poczatkowaPozycjaKursoraMyszy.y = HIWORD(lParam);
                RysujScene();
            }
            break;
        case WM_KEYDOWN:
            const float przesuniecie=0.1f;
            switch(wParam)
            {
            case VK_OEM_MINUS:
                natezenie_swiatla_tla -= 0.01f;
                if(natezenie_swiatla_tla<0) natezenie_swiatla_tla=0;
                Oswietlenie();
                break;
            case VK_OEM_PLUS:
            case '=':
                natezenie_swiatla_tla += 0.01f;
                if(natezenie_swiatla_tla>1) natezenie_swiatla_tla=1;
                Oswietlenie();
                break;
            case 'W':
            case VK_UP:
                kameraZ += przesuniecie;
                break;
            case 'S':
            case VK_DOWN:
                kameraZ -= przesuniecie;
                break;
            case 'A':
            case VK_LEFT:
                kameraX += przesuniecie;
                break;
            case 'D':
            case VK_RIGHT:
                kameraX -= przesuniecie;
                break;
            case 'C':
                static bool rzutowanieIzometryczne=false;
                rzutowanieIzometryczne = !rzutowanieIzometryczne;
                UstawienieSceny(rzutowanieIzometryczne);
                break;
            }
            RysujScene();
            break;
        }
    }

    return wynik;
}