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; }
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; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.