Początkująca szuka pomocy!!!

0

Magda wszytkich pozdrawia!!! Siema jestem początkującą programistką i proszę o pomoc!! A otóż mam problem z skompilowaniem wygaszacza ekranu, kumpela dała mi kod do C i mam tylko Turbo C. Jak to skompilować i czy potrezebne są mi te biblioteki co są na samej górze i skąd je wziąć?? Serdeczne dzięki za wszystko!!

    A oto kod:

#include <windows.h>
#include <commctrl.h>
#include <scrnsave.h>

/* Typ opisujacy pojedyncza gwiazdkie sniegu, x,y to jej srodek,
k kolor, w typ 0 najmniejsza */
typedef struct STAR
{
COLORREF k;
long x,y; // wspolrzedne gwiazdki
long dx, dy; // wspolczynniki przesuniecia
long kr; // liczba krokow
long w ;
} STAR;

long IleStar; // Liczba gwiazdek
long RozneKolory; // nie zero to gwiazdki w roznych koloryach
#define IleStarMax 500

#define NazwaKlucza "SOFTWARE\ProgramyAdama\WygaszaczPadaSnieg"

long predkosc, iSzerokosc, iWysokosc;
long lIleJest;
BOOL bUsuwamy;
STAR tg[IleStarMax+2];

UINT uTimer;

void PutStar(HDC kont, STAR w);
void RysujWygaszacz(HDC kont);
COLORREF LosujKolor();

// Rysuje platek sniegu, narazietrzy typy
void PutStar(HDC kont, STAR w)
{
long i;
switch (w.w)
{
case 0: SetPixel(kont,w.x, w.y, w.k); break;
case 1:
{
SetPixel(kont,w.x, w.y, w.k);
SetPixel(kont, w.x+1,w.y+1, w.k); SetPixel(kont, w.x-1, w.y+1, w.k);
SetPixel(kont, w.x-1, w.y-1, w.k); SetPixel(kont, w.x+1, w.y-1, w.k);
break;
}
case 2:
{
SetPixel(kont,w.x, w.y, w.k);
SetPixel(kont, w.x+1,w.y+1, w.k); SetPixel(kont, w.x-1, w.y+1, w.k);
SetPixel(kont, w.x-1, w.y-1, w.k); SetPixel(kont, w.x+1, w.y-1, w.k);
SetPixel(kont, w.x+2, w.y+2, w.k); SetPixel(kont, w.x-2, w.y+2, w.k);
SetPixel(kont, w.x-2, w.y-2, w.k); SetPixel(kont, w.x+2, w.y-2, w.k);
break;
}
case 3:
{
// Mala gwiazdka, najpierw linia pozioma
for (i=w.x-3; i<=(w.x+4); i++) SetPixel(kont, i, w.y, w.k);
SetPixel(kont, w.x, w.y-1, w.k); SetPixel(kont, w.x+1, w.y-1, w.k);
SetPixel(kont, w.x-1, w.y-2, w.k); SetPixel(kont, w.x+2, w.y-2, w.k);
SetPixel(kont, w.x-1, w.y-3, w.k); SetPixel(kont, w.x+2, w.y-3, w.k);
SetPixel(kont, w.x-2, w.y-4, w.k); SetPixel(kont, w.x+3, w.y-4, w.k);
SetPixel(kont, w.x, w.y+1, w.k); SetPixel(kont, w.x+1, w.y+1, w.k);
SetPixel(kont, w.x-1, w.y+2, w.k); SetPixel(kont, w.x+2, w.y+2, w.k);
SetPixel(kont, w.x-1, w.y+3, w.k); SetPixel(kont, w.x+2, w.y+3, w.k);
SetPixel(kont, w.x-2, w.y+4, w.k); SetPixel(kont, w.x+3, w.y+4, w.k);
break;
}
case 4:
{

	// troche wieksza gwiazdka
	for (i=w.x-5; i<=(w.x+5); i++)  SetPixel(kont, i, w.y, w.k);
 	//Teraz cztery symetryczne ramiona
 	SetPixel(kont, w.x-1, w.y-1, w.k); SetPixel(kont, w.x-2, w.y-2, w.k);
 	SetPixel(kont, w.x-2, w.y-3, w.k); SetPixel(kont, w.x-3, w.y-4, w.k);
 	SetPixel(kont, w.x+1, w.y-1, w.k); SetPixel(kont, w.x+2, w.y-2, w.k);
 	SetPixel(kont, w.x+2, w.y-3, w.k); SetPixel(kont, w.x+3, w.y-4, w.k);
 	SetPixel(kont, w.x-1, w.y+1, w.k); SetPixel(kont, w.x-2, w.y+2, w.k);
 	SetPixel(kont, w.x-2, w.y+3, w.k); SetPixel(kont, w.x-3, w.y+4, w.k);
 	SetPixel(kont, w.x+1, w.y+1, w.k); SetPixel(kont, w.x+2, w.y+2, w.k);
	SetPixel(kont, w.x+2, w.y+3, w.k); SetPixel(kont, w.x+3, w.y+4, w.k);
	break;
}

}
}

void Odczytaj();
void Zapisz();

// Procedura dialogu konfiguracyjnego
BOOL WINAPI ScreenSaverConfigureDialog(HWND dialog,
UINT komunikat, WPARAM wParam, LPARAM lParam)
{
switch(komunikat)
{
case WM_INITDIALOG:

  // Odczytaj prędkość z rejestru
  Odczytaj();

  // Ustaw zakres paska przesuwnego na 0-20
  SendDlgItemMessage(dialog, 110, TBM_SETRANGE, TRUE, MAKELONG(1,20));
  // Ustaw pozycję suwaka zależnie od prędkości
  SendDlgItemMessage(dialog, 110, TBM_SETPOS, (WPARAM)TRUE, predkosc);

  // Ustaw zakres paska przesuwnego na 5-500
  SendDlgItemMessage(dialog, 111, TBM_SETRANGE, TRUE, MAKELONG(5,500));
  // Ustaw pozycję suwaka zależnie od prędkości
  SendDlgItemMessage(dialog, 111, TBM_SETPOS, (WPARAM)TRUE, IleStar);

  if (RozneKolory!=0) CheckDlgButton(dialog, 113, BST_CHECKED);
  				else CheckDlgButton(dialog, 113, BST_UNCHECKED);

  return TRUE;
case WM_COMMAND:
  switch(LOWORD(wParam))
  {
    case IDOK:
      predkosc = SendDlgItemMessage(dialog, 110, TBM_GETPOS, 0, 0);
	  IleStar  = SendDlgItemMessage(dialog, 111, TBM_GETPOS, 0, 0);

	  if (IsDlgButtonChecked(dialog, 113)==BST_CHECKED) RozneKolory=1;
	  											else	RozneKolory=0;
      // Zapisz prędkość do rejestru
      Zapisz();
      EndDialog(dialog, TRUE);
    case IDCANCEL:
      EndDialog(dialog, FALSE);
      return TRUE;
	case 112:
		MessageBox(dialog,"Ten program jest prostym wygaszaczem ekranu. \n Może być w dowolny sposób kopiowany i rozpowszechniany.\n Autor: Adam Kowalczyk. [email protected]", "O Wygaszaczu...", 0);
	return FALSE;
  }

}
return FALSE;
}

BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
InitCommonControls();
return TRUE;
}

LONG WINAPI ScreenSaverProc(HWND okno, UINT komunikat, WPARAM wParam, LPARAM lParam)
{
HDC kont;
RECT prost;
int i;

switch(komunikat)
{
case WM_CREATE:
{

  Odczytaj();
  /* Włącz zegar generujący komunikaty WM_TIMER co okres czasu = prędkość*1/10 [sek] */
  iSzerokosc=GetSystemMetrics(SM_CXSCREEN);
  iWysokosc=GetSystemMetrics(SM_CYSCREEN);
  lIleJest=0;
  bUsuwamy=0;
  uTimer = SetTimer(okno, 1, 50, NULL);
  break;
}

case WM_TIMER:
{
  HPEN poppioro, pioro;
  int x,y;
  kont = GetDC(okno);
  // Tu rysujemy gwiazdki
  RysujWygaszacz(kont);
  ReleaseDC(okno,kont);
  break;
}

case WM_DESTROY:
  if (uTimer)     KillTimer(okno, uTimer);
  break;

}
return DefScreenSaverProc(okno, komunikat, wParam, lParam);
}

// Funkcja odczytuje prędkość wygaszacza z rejestru
void Odczytaj()
{
HKEY klucz;
DWORD rozm = 4;

// Otwórz odpowiedni klucz rejestru
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, NazwaKlucza, 0,
KEY_QUERY_VALUE, &klucz) == ERROR_SUCCESS)
{

// Odczytaj prędkość
RegQueryValueEx(klucz, "Prędkość", 0, NULL, (BYTE *)&predkosc, &rozm);
if(predkosc<0 || predkosc>20) predkosc = 2;


// Odczytaj liczbe gwiazd
RegQueryValueEx(klucz, "LiczbaGwiazd", 0, NULL, (LONG *)&IleStar, &rozm);
if (IleStar<5)		IleStar=5;
if (IleStar>IleStarMax) IleStar=IleStarMax;

// Odczytaj czy zmiana kolorow
RegQueryValueEx(klucz, "RozneKolory", 0, NULL, (LONG *)&RozneKolory, &rozm);


// Zamknij otwarty klucz rejestru
RegCloseKey(klucz);

} else
{
IleStar=20;
predkosc = 5;
RozneKolory=1;
}

}

// Funkcja zapisuje prędkość wygaszacza do rejestru
void Zapisz()
{
HKEY klucz;
DWORD akcja;
// Otwórz odpowiedni klucz rejestru
RegCreateKeyEx(HKEY_LOCAL_MACHINE, NazwaKlucza , 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &klucz, &akcja);

// Zapisz informacje o prędkości
RegSetValueEx(klucz, "Prędkość", 0, REG_DWORD, (CONST BYTE *)&predkosc, 4);
// Zapisz informacje o liczbe gwiazd
RegSetValueEx(klucz, "LiczbaGwiazd", 0, REG_DWORD, (CONST BYTE *)&IleStar, 4);
RegSetValueEx(klucz, "RozneKolory", 0, REG_DWORD, (CONST BYTE *)&RozneKolory, 4);
// Zamknij otwarty klucz rejestru
RegCloseKey(klucz);
}

void RysujWygaszacz(HDC kont)
{
STAR w;
long i;

// w inicjacji rysuj nowe pola
if (bUsuwamy==0)
{
for(i=0; i<IleStar; i++)
{
// losujemy wspolrzedne gwiazdki, na gorze ekranu
w.x=rand() % iSzerokosc;
w.y=rand() % iWysokosc;
w.k=LosujKolor();
w.kr=rand()%20;
w.dx=rand() %3;
w.dy=rand() %3;
w.w=rand() %5;
PutStar(kont, w);
tg[i]=w;
}
bUsuwamy=1;
} else
{
// zmieniamu polozenie gwiazdek
for(i=0; i<IleStar; i++)
{
w=tg[i];
// usuniecie poprzedniego punktu
w.k=0;
PutStar(kont, w);

 // przesuniecie w dol i w ktoras ze stron,
 w.y+=predkosc+w.dy;
 w.kr--;
 w.x+=(w.dx-1);
 if (w.kr<0)
 {
  w.kr=rand() %20;
  //w.x+=((rand() % 5)-2);
  w.dx=rand() %4;
 }

 // usuniecie jak poza eranem
 if ((w.x<0)||(w.y<0)||(w.x>iSzerokosc)||(w.y>iWysokosc))
 {
	// losujemy wspolrzedne gwiazdki, na gorze ekranu
	w.x=rand() % iSzerokosc;
	w.y=rand() % 20;
	w.k=LosujKolor();
	w.kr=rand() %20;
	w.dx=rand() %3;
	w.dy=rand() %3;
	w.w=rand() %5;
 }
 else
 {
  w.k=tg[i].k;
 }

 // narysuj nowa gwiazdkie
 PutStar(kont, w);
 tg[i]=w;
}

}
}

/* Funkcja losuje kolor. Ale tak ze jest zawsze jakas skladowa koloru jasna.
Taki uklad zapewnia zawsze zywe kolory. */
COLORREF LosujKolor()
{
unsigned char r,g,b;
long k;
COLORREF ret;

if (RozneKolory==0) return (RGB(255,255,255));
r=150+rand()%106;
g=150+rand()%106;
b=150+rand()%106;
k=rand()%6;
if (k==0) r=rand()%256;
else
	if (k==1) g=rand()%256;
	else
		if (k==2) b=rand()%256;
		else
			if (k==3) {
				r=rand()%256;
				b=rand()%256;
			}
			else
				if (k==4) {
					b=rand()%256;
					g=rand()%256;
				}
				else
				{
					r=rand()%256;
					g=rand()%256;
				}

ret=RGB(r,g,b);
return ret;

}

0

Sprawdź czy masze te biblioteki wymienione w nagłowku bo jak nie to nic dziwnego ze nie chce ci sie skompilowac kod jak kompilator nie wie jak sie zachowac.

0

Turbo C nie wystarczy. BCB/VC/dev-c++/... potrzebujesz kompilatora 32-bitowego, windowsowego, w ktorym te biblioteki są w standardowym wyposażeniu.

0

Ej no dobra dzięki z to ale skąd mam wziąc te biblioteki?? Można z neta siciągnąć czy muszę sie zaopatrzyć w ten dev-c++?? I czy w tym dev-c++ na 100000%% pójdzie??

// kontynuuj juz rozpoczety temat, nie twórz niepotrzebnie nowych [mf]

0

Osobiście sprawdziłem ten kod w MsV C++ i tam działa ... co do dev-C++ to pewnie tesh będzie ale mam zastrzeżenia małe co do tego kompilatora...aha w MSVC++ musiałem troche pozmieniać ale ruszyło...

0

a co do Deva to go mozesz sciagnac z http://www.bloodshed.net/...

1 użytkowników online, w tym zalogowanych: 0, gości: 1