Esimerkkiohjelma SetSysColors()-funktion käytöstä. Ohjelmasta voi olla massiivisesti hupia kuoluissa kunhan pitää huolen, että järjestelmänvalvoja ei saa tietää.
Ohjelmassa on jonkinnäköinen reset-nappi mutta sitä ei kannata kuitenkaan windows xp:ssä käyttää.
Tästä kuvasta näkee kuinka psykedeelistä jälkeä ohjelmalla saa aikaan. http://koti.mbnet.fi/linkku-/koodit/V%e4rinvaihtaja/Varit.png
Valmiiksi käännetty ohjelma löytyy http://koti.mbnet.fi/linkku-/koodit/V%e4rinvaihtaja/Varit.exe
// funktio toimii näin DWORD Varit; // Määritellään minkä värit vaihdetaan int Alueet[2] = {COLOR_ACTIVEBORDER, COLOR_ACTIVECAPTION }; /* osoitteesta http://msdn.microsoft.com/library/default.asp?url=/library/en-us /sysinfo/base/getsyscolor.asp löytyy kaikki minkä värit voi vaihtaa */ // Määritetään värit Varit[0] = RGB(0xff, 0xff, 0x00); // keltainen väri hexamuodossa Varit[1] = RGB(0, 0, 255); // kirkkaan vihreä väri // Asetetaan värit SetSysColors(2, Alueet, Varit); // ja järjestelmänvalvojan huudot ovat valmiit
/* nyt esimerkkiohjelma main.cpp */ #include <windows.h> // otsikkotiedoston lisäys #include <commctrl.h> // yleisten kontrollien otsikkotiedoston lisäys #define TIMER 1 // Ajastin jolla päivitetään väri LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; HINSTANCE hInstance; static char szAppName[] = "Värienvaihto" ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hwnd ; MSG msg ; WNDCLASSEX wndclass ; wndclass.cbSize = sizeof (wndclass) ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) COLOR_WINDOW ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ; RegisterClassEx (&wndclass) ; hwnd = CreateWindow (szAppName, szAppName, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, 200, 200, 287, 260, NULL, NULL, hInstance, NULL) ; InitCommonControls(); // Alustetaan yleiset kontrollit ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static HWND hwndR, hwndG, hwndB, hwndButt, hwndLista; // kahvat DWORD bVarit[1]; int R, G, B; R = SendMessage(hwndR, TBM_GETPOS, 0, 0); G = SendMessage(hwndG, TBM_GETPOS, 0, 0); B = SendMessage(hwndB, TBM_GETPOS, 0, 0); bVarit[0] = RGB(R, G, B ); switch (iMsg) { case WM_CREATE: SetTimer(hwnd, TIMER, 1500, NULL); // Timer, joka päivittää värit // Dropdownlist hwndLista = CreateWindow("combobox", NULL, WS_CHILD|WS_VISIBLE|CBS_SORT|CBS_DROPDOWNLIST, 10, 130, 255, 180, hwnd, (HMENU) 3, hInstance, NULL); // Lisätään rivit aakkosjärjestyksessä SendMessage(hwndLista, CB_ADDSTRING, 2, (LPARAM) "Ikkunan tausta"); SendMessage(hwndLista, CB_ADDSTRING, 2, (LPARAM) "Nappien tekstit"); SendMessage(hwndLista, CB_ADDSTRING, 2, (LPARAM) "Otsikko"); SendMessage(hwndLista, CB_ADDSTRING, 2, (LPARAM) "Otsikkopalkki (ei toimi win95 ja NT)"); SendMessage(hwndLista, CB_ADDSTRING, 2, (LPARAM) "Tekstit"); SendMessage(hwndLista, CB_ADDSTRING, 2, (LPARAM) "Tumma varjo"); SendMessage(hwndLista, CB_ADDSTRING, 2, (LPARAM) "Vaalea varjo"); SendMessage(hwndLista, CB_ADDSTRING, 2, (LPARAM) "Valikot"); SendMessage(hwndLista, LB_SETCURSEL, 2, 0); // Valitaan ensimmäinen /////////////////////////////////////////// hwndButt=CreateWindow("button", "Vaihda värit", WS_CHILD|WS_VISIBLE, 20, 190, 100, 30, hwnd, (HMENU) 5, hInstance, NULL); hwndButt=CreateWindow("button", "Reset", WS_CHILD|WS_VISIBLE, 140, 190, 100, 30, hwnd, (HMENU) 6, hInstance, NULL); CreateWindow ("button", NULL, WS_CHILD|WS_VISIBLE|BS_GROUPBOX, 3, 3, 270, 225, hwnd, (HMENU) 0, hInstance, NULL) ; ////////////////////////////////////////// // trackbarit // hwndR = CreateWindowEx (NULL, TRACKBAR_CLASS, NULL, WS_CHILD|WS_VISIBLE|TBS_HORZ|TBS_BOTTOM, 9, 20, 255, 30, hwnd, (HMENU) 0, hInstance, NULL) ; hwndG = CreateWindowEx (NULL, TRACKBAR_CLASS, NULL, WS_CHILD|WS_VISIBLE|TBS_HORZ|TBS_BOTTOM, 9, 60, 255, 30, hwnd, (HMENU) 0, hInstance, NULL) ; hwndB = CreateWindowEx (NULL, TRACKBAR_CLASS, NULL, WS_CHILD|WS_VISIBLE|TBS_HORZ|TBS_BOTTOM, 9, 100, 255, 30, hwnd, (HMENU) 0, hInstance, NULL) ; // asetetaan pituudet SendMessage (hwndB, TBM_SETRANGE, TRUE, MAKELONG(0, 255)) ; SendMessage (hwndG, TBM_SETRANGE, TRUE, MAKELONG(0, 255)) ; SendMessage (hwndR, TBM_SETRANGE, TRUE, MAKELONG(0, 255)) ; return 0 ; case WM_PAINT: HDC hDC; PAINTSTRUCT Ps; HBRUSH Brush; hDC = BeginPaint(hwnd, &Ps); Brush = CreateSolidBrush(RGB(R, G, B )); SelectObject(hDC, Brush); Rectangle(hDC, 20, 160, 240, 185); DeleteObject(Brush); EndPaint(hwnd, &Ps); break; case WM_DESTROY : MessageBeep(0); MessageBox(hwnd, "Muista, vihainen järjestelmänvalvoja on jo perässäsi!", "Varoitus",MB_OK); PostQuitMessage (0) ; return 0 ; case WM_COMMAND : case BN_CLICKED: if(LOWORD(wParam)==6) // resetti { DWORD aVarit[9]; aVarit[0] = RGB(140, 140, 140); // Ei ehkä ihan kohdallaan mutta kelvannee aVarit[1] = RGB(192, 192, 192); aVarit[2] = RGB(0,0,0); aVarit[3] = RGB(0,0,0); aVarit[4] = RGB(255,255,255); aVarit[5] = RGB(255,255,255); aVarit[6] = RGB(192, 192, 192); aVarit[7] = RGB(255, 255, 255); aVarit[8] = RGB(0x80, 0x80, 0x80); aVarit[9] = RGB(0xff, 0xff, 0xff); int Alueet[10] = { COLOR_3DSHADOW, COLOR_MENU, COLOR_BTNTEXT, COLOR_WINDOWTEXT, COLOR_HIGHLIGHTTEXT, COLOR_CAPTIONTEXT, COLOR_BTNFACE, COLOR_3DHIGHLIGHT, COLOR_3DSHADOW, COLOR_WINDOW}; SetSysColors(10, Alueet, aVarit); return 0; } if(LOWORD(wParam)==5) { int id = SendMessage(hwndLista, CB_GETCURSEL, 0,0); if(id==0) { int Alueet[1] = { COLOR_WINDOW }; SetSysColors(1, Alueet, bVarit); return 0; } if(id==1) { int Alueet[1] = { COLOR_BTNTEXT }; SetSysColors(1, Alueet, bVarit); return 0; } if(id==2) { int Alueet[1] = { COLOR_CAPTIONTEXT }; SetSysColors(1, Alueet, bVarit); return 0; } if(id==3) { int Alueet[1] = { COLOR_ACTIVECAPTION }; SetSysColors(1, Alueet, bVarit); return 0 ; } if(id==4){ int Alueet[1] = { COLOR_WINDOWTEXT }; SetSysColors(1, Alueet, bVarit); return 0; } if(id==5){ int Alueet[1] = { COLOR_3DSHADOW }; SetSysColors(1, Alueet, bVarit); return 0; } if(id==6){ int Alueet[1] = { COLOR_3DHIGHLIGHT }; SetSysColors(1, Alueet, bVarit); return 0; } if(id==7){ int Alueet[1] = { COLOR_MENU }; SetSysColors(1, Alueet, bVarit); return 0; } else { } } case WM_TIMER : // Ajastimen aika on kulunut ja se lähettää WM_TIMER messun switch(wParam) { case TIMER: InvalidateRect(hwnd, NULL,0); // Piiretään värit uudestaan SetTimer(hwnd, TIMER, 50, NULL); // laitetaan timer uudestaan return 0; } return 0; } return DefWindowProc (hwnd, iMsg, wParam, lParam) ; }
Tosi hyvää Win32 esimerkkiä
Virhe tuolla ensimmäisessä listauksessa:
lainaus:
DWORD Varit;
Pitäisi olla "DWORD Varit[2];" tai vielä paremmin "COLORREF Varit[2];"
lainaus:
Varit[1] = RGB(0, 0, 255); // kirkkaan vihreä väri
Pitäisi olla "sininen".
Onkos tää freewarea???
Oli ihan älyttömän hauska ohjelma...
Noi sivut ei toimi (enää..??) jos ton sais jostain käänettynä?
Eikös tämä kuuluisi Grafiikka-osastolle?
lainaus:
Eikös tämä kuuluisi Grafiikka-osastolle?
Onkos sillä niin väliä?
Linkku kirjoitti:
lainaus:
Eikös tämä kuuluisi Grafiikka-osastolle?
Onkos sillä niin väliä?
o
Aihe on jo aika vanha, joten et voi enää vastata siihen.