Sveuilite u Zagrebu PMF Matematiki odjel Objektno programiranje
Sveučilište u Zagrebu PMF – Matematički odjel Objektno programiranje (C++) Vježbe 08 – MFC uvod Vinko Petričević
Poruke • Pisanje Windows programa se svodi na odgovaranje na poruke (messages) koje šalje operacijski sustav (OS) • poruka je 32 -bitni broj koji opisuje neki događaj. Npr. Kada mičemo miš, aktivnom prozoru se šalje poruka WM_MOUSEMOVE, kada pritisnemo tipku, šalje se poruka WM_KEYDOWN, kada resizamo prozor, šalje se poruka WM_SIZE • Svakom threadu OS napravi queue u koji se dodaju poruke, a program se brine da te poruke pravilno izvršava (npr. kada dobije poruku za resize, treba pomaknuti prozor i iscrtati ga ponovo) Objektno programiranje (C++) – Vježbe 08 – MFC Uvod 2
Handleovi • Svaki objekt u Windowsima handle (32 -bitni broj) pomoću kojeg mu možemo pristupiti (handleovi za prozore, gumbove, datoteke, memoriju, slike…). Možemo ih shvatiti kao pointere. • Kada nam više ne trebaju, potrebno ih je uništiti Objektno programiranje (C++) – Vježbe 08 – MFC Uvod 3
Poruke • npr. imamo prozor kojem je dan handle (HWND prozor) • OS mu želi reći da je neki prozor koji je bio iznad njega pomaknut, te bi ga trebalo ponovo iscrtati, šalje mu poruku: Post. Message(prozor, WM_PAINT, 0, 0); • Ta funkcije dodaje poruku na message. Queue programa koji je kreirao prozor • Sada naša aplikacija treba obraditi poruku: void Handle. The. Message(long Message) { switch(Message) { case WM_PAINT: Draw. Window(); break; case WM_KEYDOWN: break; // itd… } } Objektno programiranje (C++) – Vježbe 08 – MFC Uvod 4
Zadatak • Napišite Windows aplikaciju i dodajte gumb na nju, te kada se klikne gumb, podigne Message. Box i ispiše neku poruku Objektno programiranje (C++) – Vježbe 07 – Predlošci 5
MFC • MFC (Microsoft Foundation Classes) wrap-a većinu objekata u klase, tako da se ne moramo brinuti kada uništiti zauzete resurse, te većinu poruka pakira u funkcije sa smislenim nazivima • #include <afxwin. h> class MFC_Prvi_Window : public CFrame. Wnd { public: MFC_Prvi_Window () { Create(NULL, “Naziv"); } }; class My. App : public CWin. App { MFC_Prvi_Window *wnd; public: BOOL Init. Instance() { wnd = new MFC_Prvi_Window(); m_p. Main. Wnd = wnd; m_p. Main. Wnd->Show. Window(SW_SHOW); return TRUE; } }; My. App the. App ; • Zadatak – riješite prethodni zadatak koristeći MFC klase Objektno programiranje (C++) – Vježbe 08 – MFC Uvod 6
- Slides: 6