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.