pranešimų ciklo architektūra

14
Pranešimų ciklo architektūra

Upload: collin

Post on 26-Jan-2016

38 views

Category:

Documents


0 download

DESCRIPTION

Pranešimų ciklo architektūra. WinMain. Programuojant Windows aplinkoje yra tam tikrų skirtumų. Pavyzdžiui, nėra main() funkcijos. Bet vietoj jos yra funkcija _tWinMain() ! Ji apibrėžiama antraštiniame faile taip:. Parametrai. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Pranešimų ciklo architektūra

Pranešimų ciklo architektūra

Page 2: Pranešimų ciklo architektūra

WinMain

• Programuojant Windows aplinkoje yra tam tikrų skirtumų. Pavyzdžiui, nėra main() funkcijos. Bet vietoj jos yra funkcija _tWinMain() !

• Ji apibrėžiama antraštiniame faile <tchar.h> taip:

Page 3: Pranešimų ciklo architektūra

Parametrai

• hThisInstance – dabartinės programos identifikatorius• hPrevInstance – anksčiau veikusios tos pačios programos

versijos identifikatorius. Vis dėlto, NT tipo sistemose jis yra NULL

• lpszArgument – argc ir argv kintamųjų atitikmuo (nevektorinis)• iCmdShow – nurodo ar programos grafinė sąsaja turi būti

rodoma iš karto ar programa turi veikti suskleistu (minimized) režimu.

Page 4: Pranešimų ciklo architektūra

Atliekami darbai

1. Užregistuoti klases, naudojamas programos

2. Sukurti prgramos naudojamus Langus

3. Paleisti pranešimų ciklą

Page 5: Pranešimų ciklo architektūra

Langų klasių registravimas

Kiekviena grafinė detalė yra “langas”. Tai reiškia, kad turi egzistuoti “Lango klasė” su didelėmis pasirinkimo galimybėmis. Taigi:

1.Užpildome WNDCLASS duomenų objekto laukus

2.Perduodame WNDCLASS objektą RegisterClass funkcijai

Page 6: Pranešimų ciklo architektūra

WNDCLASSEX

Egzistuoja išplėstinė (extended) procedūros WNDCLASS versija – WNDCLASSEX, kurią reikia perduoti funkcijai RegisterClassEx.

Užregistravus klasę galime sėkmingai panaikinti WNDCLASS struktūrą, nes jos daugiau nebereikės.

Page 7: Pranešimų ciklo architektūra

Kuriant langus

Langus galima sukurti su funkcijomis CreateWindow arba CreateWindowEx. Šios funkcijos grąžina HWND objektą. Šis objektas, norint, kad langas būtų nupieštas ekrane, perduodamas funkcijai ShowWindow.

Page 8: Pranešimų ciklo architektūra

Pranešimų ciklas

• Sukūrus langą toliau jis bendraus su sistema pranešimų (messages) pagalba. T.y. Sistema siųs pranešimą langui ir langas siųs pranešimą atgal.

• Pranešimai siunčiami MSG duomenų tipo forma. Šis objektas perduodamas funkcijai GetMessage(), kuri skaito pranešimą iš pranešimų eilės arba laukia naujo pranešimo. Nuskaitytas pranešimas siunčiamas funkcijai TranslateMessage (paprastoms užduotims) ir DispatchMessage (apdorojimui).

Page 9: Pranešimų ciklo architektūra
Page 10: Pranešimų ciklo architektūra

Lango procedūra

• Šia procedūrą galima vadinti kaip norint, bet jos prototipas būtų toks:

• LRESULT – daugybinis 32 bitų rezultatats

• fwnd – lango identifikatorius

• msg – pranešimas

• xPARAM – pranešimo parametrai

Page 11: Pranešimų ciklo architektūra

Pavyzdys

• WM_KEYDOWN – msg pranešimas, kad nuspaustas klaviatūros klavišas. Tuomet:

1.WPARAM saugos klavišo reikšmę, pavyzdžiui, raidę “A”

2.LPARAM saugos komandinių klavišų reikšmes, t.y. ar nuspausti klavišai CTRL, ALT, SHIFT ir ar nėra aktyvuota pasikartojimo funkcija.

Page 12: Pranešimų ciklo architektūra

Makrokomandos

• Yra apibrėžtos keletas makrokomandų naudojamų darbui su parametrais:

• LOWORD(x) – grąžina pirmuosius 16 iš 32 bitų• HIWORD(x) – grąžina sekančius 16 iš 32 bitų• LOBYTE(x) – grąžina pirmuosius 8 iš 16 bitus• HIBYTE(x) – grąžina sekančius 8 iš 16 bitus

Pavyzdžiui, jei reikia 2 baito iš wParam lauko:

HIBYTE(LOWORD(wParam));

Page 13: Pranešimų ciklo architektūra
Page 14: Pranešimų ciklo architektūra

Pranešimai

• WM_CREATE – sukurti langą

• WM_PAINT – perpiešti langą

• WM_COMMAND – vartotojo veiksmas

• WM_CLOSE – pagal nutylėjimą, ši komanda perduodama procedūrai DefWindowProc, kuri generuoja komandą WM_DESTROY