waxx Temat założony przez niniejszego użytkownika |
WinAPI - problem z wygaszaczem » 2012-04-12 18:45:20 Siema. Ogólnie to nigdy się nie bawiłem wapi chyba, żeby walnąć okno pod coś innego, no ale to tyle. Robie to nie dla mnie. Ma być w devie. Kod jest z neta, ale nie mogę tego za cholerę skompilować.
#include <windows.h> #include <commctrl.h> #include <scrnsave.h>
#define IlePunktowMax 500 #define NazwaKlucza "SOFTWARE\\ProgramyAdama\\WygaszaczMiganie"
long IlePunkt; long predkosc, iSzerokosc, iWysokosc; UINT uTimer;
void Odczytaj(); void Zapisz(); void RysujWygaszacz( HDC kont );
BOOL WINAPI ScreenSaverConfigureDialog( HWND dialog, UINT komunikat, WPARAM wParam, LPARAM lParam ) { switch( komunikat ) { case WM_INITDIALOG: Odczytaj(); SendDlgItemMessage( dialog, 110, TBM_SETRANGE, TRUE, MAKELONG( 1, 20 ) ); SendDlgItemMessage( dialog, 110, TBM_SETPOS,( WPARAM ) TRUE, predkosc ); SendDlgItemMessage( dialog, 111, TBM_SETRANGE, TRUE, MAKELONG( 5, 500 ) ); SendDlgItemMessage( dialog, 111, TBM_SETPOS,( WPARAM ) TRUE, IlePunkt ); return TRUE; case WM_COMMAND: switch( LOWORD( wParam ) ) { case IDOK: predkosc = SendDlgItemMessage( dialog, 110, TBM_GETPOS, 0, 0 ); IlePunkt = SendDlgItemMessage( dialog, 111, TBM_GETPOS, 0, 0 ); 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. akowalc1@elka.pw.edu.pl", "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; switch( komunikat ) { case WM_CREATE: Odczytaj(); iSzerokosc = GetSystemMetrics( SM_CXSCREEN ); iWysokosc = GetSystemMetrics( SM_CYSCREEN ); uTimer = SetTimer( okno, 1, predkosc * 50, NULL ); break; case WM_TIMER: kont = GetDC( okno ); RysujWygaszacz( kont ); ReleaseDC( okno, kont ); break; case WM_DESTROY: if( uTimer ) KillTimer( okno, uTimer ); break; } return DefScreenSaverProc( okno, komunikat, wParam, lParam ); }
void Odczytaj() { HKEY klucz; DWORD rozm = 4; if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, NazwaKlucza, 0, KEY_QUERY_VALUE, & klucz ) == ERROR_SUCCESS ) { RegQueryValueEx( klucz, "Prêdkoœæ", 0, NULL,( BYTE * ) & predkosc, & rozm ); if( predkosc < 0 || predkosc > 20 ) predkosc = 2; RegQueryValueEx( klucz, "LiczbaPunktow", 0, NULL,( LONG * ) & IlePunkt, & rozm ); if( IlePunkt < 5 ) IlePunkt = 5; if( IlePunkt > IlePunktowMax ) IlePunkt = IlePunktowMax; RegCloseKey( klucz ); } else { IlePunkt = 20; predkosc = 5; } }
void Zapisz() { HKEY klucz; DWORD akcja; RegCreateKeyEx( HKEY_LOCAL_MACHINE, NazwaKlucza, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, & klucz, & akcja ); RegSetValueEx( klucz, "Prêdkoœæ", 0, REG_DWORD,( CONST BYTE * ) & predkosc, 4 ); RegSetValueEx( klucz, "LiczbaPunktow", 0, REG_DWORD,( CONST BYTE * ) & IlePunkt, 4 ); RegCloseKey( klucz ); }
void RysujWygaszacz( HDC kont ) { long i; long x, y; COLORREF k; for( i = 0; i < IlePunkt; i++ ) { x = rand() % iSzerokosc; y = rand() % iWysokosc; k = RGB( rand() % 256, rand() % 256, rand() % 256 ); SetPixelV( kont, x, y, k ); SetPixelV( kont, x + 1, y, k ); SetPixelV( kont, x, y + 1, k ); SetPixelV( kont, x - 1, y, k ); SetPixelV( kont, x, y - 1, k ); } }
tak... wywalane mam błędy linkera, że undefined reference winmain i setpixelV. problem w tym, że skoro to wygaszacz to nie mam entry pointa. co robić? ktoś kodził kiedyś screensavery?;d |