WinAPI

WinMain

WinMain


WinMain funkcja główna każdej okienkowej aplikacji. Jej składnie jest następująca:

int WINAPI WinMain(
 
   HINSTANCE hInstance,        // uchwyt do aktualnego okna instance
 hPrevInstance hPrevInstance,        // handle to previous instance
   LPSTR lpCmdLine,        // pointer to command line
   int nCmdShow         // show state of window
);


Ta funkcja przyjmuje następujące 4 argumenty:

hInstance – typu HINSTANCE – jest to uchwyt do naszego okna

hPrevInstance – typu hPrevInstance – to również jest uchwyt ale do poprzedniej instalacji; jest nieużywany więc można o nim praktycznie zapomnieć

lpCmdLine – typu LPSTR – jest to łańcuch znaków. Gdy chcemy uruchomić nasz program z argumentami to właśnie poprzez ten łańcuch możemy się do nich „dobrać”. Przykładem czegoś takiego jest np. ping –a –s XXX.XXX.XXX.XXX , gdzie X to adres IP komputera.

NCmdShow – typu int (liczba całkowita) – od niej zależeć będzie czy okno ma zostać np. zminimalizowane czy maksymalizowane mówiąc w skrócie sposób wyświetlania okna.


Przykładem zastosowanie tej funkcji zamieszczam poniżej (wygenerowane przez Dev-C++):

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
 
{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */
//...
/* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
 
    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}

1 komentarz

NeoDemon 2007-09-15 11:44

int WINAPI WinMain(
 
   HINSTANCE hInstance,    // uchwyt do aktualnego okna instance
 hPrevInstance hPrevInstance,    // handle to previous instance
   LPSTR lpCmdLine,    // pointer to command line
   int nCmdShow     // show state of window
);


powinno być

int WINAPI WinMain(
 
   HINSTANCE hInstance,    // handle to current instance
   HINSTANCE hPrevInstance,    // handle to previous instance
   LPSTR lpCmdLine,    // pointer to command line
   int nCmdShow     // show state of window
);


// hInstance – typu HINSTANCE – jest to uchwyt do naszego okna

to jest uchwyt identyfikujący instancję aplikacji

// hPrevInstance – typu hPrevInstance – to również jest uchwyt ale do poprzedniej instalacji;
// jest nieużywany więc można o nim praktycznie zapomnieć

chyba do poprzedniej instancji, i nie typu hPrevInstance tylko typu HINSTANCE

// lpCmdLine – typu LPSTR – jest to łańcuch znaków.

to jest wskaźnik na łańcuch znaków (LP = Long Pointer)