Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C: Värien vaihto

Sivun loppuun

Linkku [13.06.2004 15:55:14]

#

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) ;
}

kaviaari [20.06.2004 18:09:17]

#

Tosi hyvää Win32 esimerkkiä

Metabolix [16.07.2004 22:42:58]

#

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".

p-p [14.08.2004 20:54:45]

#

Onkos tää freewarea???
Oli ihan älyttömän hauska ohjelma...

FrozenFire [01.12.2004 08:40:05]

#

Noi sivut ei toimi (enää..??) jos ton sais jostain käänettynä?

InvalidCo [16.06.2005 09:35:46]

#

Eikös tämä kuuluisi Grafiikka-osastolle?

Linkku [16.06.2005 16:59:35]

#

lainaus:

Eikös tämä kuuluisi Grafiikka-osastolle?

Onkos sillä niin väliä?

Aloittelija3 [02.12.2007 14:17:10]

#

Linkku kirjoitti:

lainaus:

Eikös tämä kuuluisi Grafiikka-osastolle?

Onkos sillä niin väliä?

o


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta