Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Win32 ohje

Azure [30.12.2005 19:26:57]

#

Juu! Tässä tutkin tuota WinAPI koodia Dev-CPP:n valmis ohjeissa, ja sain tällästä ymmärrystä sen ohje koodista jolla saadaan aikaan ikkuna. Joten parantelisiko joku noita mun kommentteja jos jossakin on joku väärin tai epäselvästi selitetty:

#include <windows.h>

//Määrittää parametrit */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

//Tekee luokalle(class) muuttujan nimen  */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* Tällä käsitellään ikkunaa */
    MSG messages;            /* Tällä viestit(messages) tallennetaan "application" astuksiin*/
    WNDCLASSEX wincl;        /* Data rakenne ikkuna luokkaan */

    /* Ikkunan rakenne */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* Funktiolla kutsutaan ikkunaa */
    wincl.style = CS_DBLCLKS;                 /* Ikkunan tyyli::Catch double-clicks??? */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Käyttää oletus ikonia ja hiiren osoitinta */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* Ei valikkoa */
    wincl.cbClsExtra = 0;                      /* Ei extra tavuja ikkuna luokkaan */
    wincl.cbWndExtra = 0;                      /* Ikkunan esimerkki rakenne */
    /* Laittaa windowsin normaali tausta värin ikkunan taustalle */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Rekiströi ikkuna luokan, ja lopettaa ohjelman */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* Ikkuna luokka rekisteröity, nyt tehdään ohjelma */
    /* Tehdään ikkuna ja siihen asetukset */
    hwnd = CreateWindowEx (
           0,                   /* Oletus nolla */
           szClassName,         /* Ikkunan nimi "Windows App"*/
           "Windows App",       /* Teksti tähän (ikkunan nimi "Windows App") */
           WS_OVERLAPPEDWINDOW, /* Ikkunan oletus asetus ( muita asetuksia sanalla "styles") */
           CW_USEDEFAULT,       /* Määrittää ikkunan sijainnin ( CW_USEDEFAULT = oletusarvo) */
           CW_USEDEFAULT,       /* Ikkunan pääte piste ruudulla ( CW_USEDEFAULT = oletusarvo)*/
           544,                 /* Ikkunan/ohjelman leveys */
           375,                 /* ja korkeus */
           HWND_DESKTOP,        /* Ikkuna on pikku ruutuna työpöydällä */
           NULL,                /* Ei valikkoa */
           hThisInstance,       /* Esimerkki ohjelma */
           NULL                 /* Ei ikkunan luomis dataa */
           );

    /* Tekee ikkunan näkyviin ruudulle */
    ShowWindow (hwnd, nFunsterStil);

    /* Ajetaan viesti silmukka/looppi(message loop). It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* kääntää virtuaali-näppäin viestit merkki viesteihin */
        TranslateMessage(&messages);
        /* Lähettää viestin (message)  WindowProcedurelle */
        DispatchMessage(&messages);
    }

    /* Ohjelman paluu arvo on 0 - Tuo Arvo on  PostQuitMessage() gave */
    return messages.wParam;
}


/*  Tämä funktio kutsuu Windows funktiota DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* Käsittellään viestit */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* lähettää WM_QUIT viesti jonolle */
            break;
        default:                      /* Palauttaa arvot hwnd, message, wParam, lParam  */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}

Meitsi [30.12.2005 21:31:18]

#

Vähän muokkaisin:

#include <windows.h>

//Määrittää parametrit */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

//Tekee luokalle(class) muuttujan nimen  */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* Ikkunan kahva */
    MSG messages;            /* Tällä viestit(messages) tallennetaan "application" astuksiin*/
    WNDCLASSEX wincl;        /* Data rakenne ikkuna luokkaan */

    /* Ikkunan rakenne */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* Funktiolla kutsutaan ikkunaa */
    wincl.style = CS_DBLCLKS;                 /* Ikkunan tyyli::Catch double-clicks??? */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Käyttää oletus ikonia ja hiiren osoitinta */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* Ei valikkoa */
    wincl.cbClsExtra = 0;                      /* Ei extra tavuja ikkuna luokkaan */
    wincl.cbWndExtra = 0;                      /* Ikkunan esimerkki rakenne */
    /* Laittaa windowsin normaali tausta värin ikkunan taustalle */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Rekiströi ikkuna luokan, ja lopettaa ohjelman jos epäonnistuu */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* Ikkuna luokka rekisteröity, nyt tehdään ohjelma */
    /* Tehdään ikkuna ja siihen asetukset */
    hwnd = CreateWindowEx (
           0,                   /* Oletus nolla */
           szClassName,         /* Ikkunan nimi "Windows App"*/
           "Windows App",       /* Ikkunan otsikko (ikkunan nimi "Windows App") */
           WS_OVERLAPPEDWINDOW, /* Ikkunan oletustyyli( muita asetuksia sanalla "styles") */
           CW_USEDEFAULT,       /* ikkunan x ( CW_USEDEFAULT = oletusarvo) */
           CW_USEDEFAULT,       /* ikkunan y ( CW_USEDEFAULT = oletusarvo)*/
           544,                 /* Ikkunan/ohjelman leveys */
           375,                 /* ja korkeus */
           HWND_DESKTOP,        /* Parent-ikkunan kahva (työpöytä tässä tapauksessa) */
           NULL,                /* Ei valikkoa */
           hThisInstance,       /* ohjelman instanssi */
           NULL                 /* Ei ikkunan luomis dataa */
           );

    /* Tekee ikkunan näkyviin ruudulle */
    ShowWindow (hwnd, nFunsterStil);

    /* Ajetaan viesti silmukka/looppi(message loop). It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* kääntää virtuaali-näppäin viestit merkki viesteihin */
        TranslateMessage(&messages);
        /* Lähettää viestin (message)  WindowProcedurelle */
        DispatchMessage(&messages);
    }

    /* Ohjelman paluu arvo on 0 - Tuo Arvo on  PostQuitMessage() gave */
    return messages.wParam;
}


/*  Tämä funktio kutsuu Windows funktiota DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* Käsittellään viestit */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* lähettää WM_QUIT viesti jonolle */
            break;
        default:                      /* Palauttaa arvot hwnd, message, wParam, lParam  */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}

Vastaus

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

Tietoa sivustosta