Sunteți pe pagina 1din 2

Programarea în Windows

Home / My courses / PWINDOWS / Capitolul 1. Concepte fundamentale. Partea 2 / Punctul de intrare în program - inițializarea

Punctul de intrare în program - inițializarea

Codul începe cu #include windows.h, unde windows.h este un fișier antet care definește în API-ul Windows tipurile și constantele. 

În continuare, puteți vedea declarația în avans a funcției WndProc (prototipul), necesară pentru funcția WinMain.

Urmează funcția WinMain(), care este punctul de intrare în program și joacă același rol ca și funcția main() în mediul C convențional, cu excepția că
are mai mulți parametri, or o aplicație Windows GUI este mai complexă. Aici, în această aplicație foarte simplă, unii dintre acești parametri nici
măcar nu sunt folosiți.

/*******************************************************************

* HelloWin.c -- Displays "Hello, Windows" in client area

*               (c) Charles Petzold, 1996

* ©Miro Samek, 2020

* Adaptat pentru cursul "Programarea pilotata de evenimente"

*******************************************************************/

#include <windows.h> // Windows API

LRESULT CALLBACK WndProc(HWND me, UINT sig, WPARAM wParam, LPARAM lParam);

#define WIN_HANDLED   ((LRESULT)0)

/*----------------------------------------------------------------

* The main entry point to the Windows apllication

*/

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PTSTR szCmdLine, int iShowCmd)

    WNDCLASSEX wnd; // instance of the Window class ('wnd' object)

    HWND hwnd;  // "handle" to the window object

    int status; // status of the processing to report back to Windows

    UNREFERENCED_PARAMETER(hPrevInstance);

    UNREFERENCED_PARAMETER(szCmdLine);

Dar urmează o parte interesantă, în care pregătim clasa de fereastră (tipul WNDCLASSEX) pentru a fi înregistrată în Windows.

Am formatat și comentat în mod special inițializarea, astfel încât să recunoașteți că aici vă angajați într-un fel de programare orientată obiect, așa
cum ați procedat în OOP cu limbajul C. Deci, în mod special, vedem mai întâi setarea atributelor unei instanțe din clasa ferestrei 'wnd', cum ar fi
stilul ferestrei, cursorul mouse-ului pentru fereastră și numele clasei ferestrei.

    // set attributes of the 'wnd' object

    wnd.cbSize = sizeof(wnd);

    wnd.style = CS_HREDRAW | CS_VREDRAW;

    wnd.cbClsExtra = 0;
    wnd.hInstance = hInstance;

    wnd.hIcon = NULL; // LoadIcon(NULL, IDI_APPLICATION);

    wnd.hCursor = LoadCursor(NULL, IDC_ARROW);

    wnd.hbrBackground = GetStockObject(WHITE_BRUSH);

    wnd.lpszMenuName = NULL;

    wnd.hIconSm = NULL;

    wnd.lpszClassName = "HelloWin";

    wnd.lpfnWndProc = &WndProc; // attach the "window proc"     // set "virtual" function of the 'wnd' object

    RegisterClassEx(&wnd);    // register the Window Class with Windows

    // constructor of the 'wnd' class

    hwnd = CreateWindow(

        wnd.lpszClassName,    // window class name

        "Hello, Windows!",    // window caption

        WS_OVERLAPPEDWINDOW,  // window style

        CW_USEDEFAULT,        // initial x position

        CW_USEDEFAULT,        // initial y position

        300,                  // initial x size

        200,                  // initial y size

        NULL,                 // parent window handle

        NULL,                 // window menu handle

        hInstance,            // program instance handle

        NULL);                // creation parameters

    ShowWindow(hwnd, iShowCmd);

    UpdateWindow(hwnd);

Urmează atribuirea funcției “virtuale” - procedura de fereastră - WndProc este funcția care va trata mesajele pentru această clasă de ferestre. Aici,
designerii API Windows au folosit tehnica simplă de implementare a încorporării unui pointer la funcția virtuală direct în structura atributelor.

Apoi, este apelată funcția Windows API – RegisterClassEx(&wnd), pentru a înregistra clasa de fereastră cu valorile setate ale atributelor.

Și în sfârșit, apelul la CreateWindow joacă rolul unui constructor, deoarece creează un obiect fereastră bazat pe clasa de ferestre chiar acum
înregistrată.

Odată creată fereastra aplicației, aceasta este afișată pe ecran (ShowWindow) și actualizată (UpdateWindow).

Last modified: Sunday, 3 May 2020, 11:59 PM

◄ HelloWin modificat (de la Charles Punctul de intrare în program - bucla de


Jump to...
Petzold) mesaje ►

You are logged in as Mihail Curchi (Log out)


PWINDOWS
Data retention summary
Get the mobile app

S-ar putea să vă placă și