Win32 alkalmazások architektúrája és eseményvezérelt programozás Win32 környezetben Flashcards
OS felépítése, natív alkalmazások
Win32 alkalmazás
Operációs rendszer:
Win32 API (Ablakkezelés. IO, Rajz…Memóriakezelés)
Implementáció (Ablakkezelés. IO, Rajz…Memóriakezelés)
Driverek (VGA, Hangkártya, HDD driver)
Mi az API?
API alatt a Windows alatt használt és DLL-ekben definiált függvények összeségét értjük. Ezek nyelvfüggetlen elemek.
Változótípusok Win32 esetén
Mijnden nyelvnek vannak saját változótípusai. Ezeken a hagyományos típusokon kivül vannak olyan típusok melyek Windows specifikusak. Ezek a típusok mindig egy adott nyelv esetében mindig az adott nyelv típusára képződnek le.
API függvények WINAPI típusa?
Az API függvények WINAPI típusúak (régebben FAR PASCAL). Ezek a függvények hivási konvencióját határozzák meg. A függvény paraméterei deklarálási sorrend alapján jobbról balra kerülnek a stack-be és a stack kiürítése a hívott függvény feladata.
API függvények WINAPI típusa?
Az API függvények WINAPI típusúak (régebben FAR PASCAL). Ezek a függvények hivási konvencióját határozzák meg. A függvény paraméterei deklarálási sorrend alapján jobbról balra kerülnek a stack-be és a stack kiürítése a hívott függvény feladata.
Mit nevezünk CALLBACK függvénynek?
Olyan kitüntetett szerepű függvényeket, amelyeket mi írunk meg, de az OS hívja őket. (WIN32 esetén Windows) A CALLBACK típusú függvények hívása is a Pascal ívási konvenció szerint történik.
Mik a leírók?
Amikor a Windows-ban létrehozunk valamilyen objektumot, akkor általában azt egy leíró (handle) fogja azonosítani. Pl. amikor létrehozunk egy ablakot, akkor az ablakot létrhozó függvény az új ablaknak a leírójával tér vissza. Ez a leíró azonosítja az újonnan létrehozott ablakot.
32 bites érték típusa HANDLE vagy valamilyen más H betűvel kezdődő típus.
Hogyan működnek az eseményvezérelt programok?
A hagyományos programozás során mindig a program hívja az operációs rendszert, A Windows programok működése a “hagyományos” programokétól alapvetően eltér. A Windows alatt futó programok esetében ennek a fordítottja történik.A program várakozik és az OS hívja a programunkat.
Hogyan működnek az eseményvezérelt programok?
A hagyományos programozás során mindig a program hívja az operációs rendszert, A Windows programok működése a “hagyományos” programokétól alapvetően eltér. A Windows alatt futó programok esetében ennek a fordítottja történik.A program várakozik és az OS hívja a programunkat.
Eseményvezérelt programozás üzenetei hogyan épülnek fel?
typdef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; }MSG;
(címzett ablak leírója, az üzenet tárgya/tartalma, az üzenet paraméterei, az üzenet keltének időpontja, az üzenet keltésekor érvényes kurzor pozíció)
Az üzenet címzettje?
HWND hwnd
Minden üzenetnek van egy címzett vagy cél ablaka. Egy applikáció alatt azt az applikációt értjük, amely éppen elfogadja a felhasználói eseményket. Egy applikáción belül aktív ablakról is beszélhetünk. A periféria üzenetek címzettje az az ablak, amelyik az esemény bekövetkezésekor aktív volt.
Mi az üzenet típusa?
Egy adott üzenet típust egy egyedi szám azonosít. A könnyebb kezelhetőség érdekében az egyes üzenet típusok a windows.h-ban konstansként vannak definiálva. pl. WM_KEYDOWN.
Ablakkezelő függvény (Windows Procedure)
A Windows-ban szinte minden olyan vizuális elem ablak (windows), amelyik valamilyen interakcióra képes a felhasználóval. Minden ablakhoz tartozik egy ablakkezelő függvény (CALLBACK típusú), amely gondoskodik az ablakhoz érkező események kezeléséről. Az OS értesíti a programunkat: meghívja a célablak ablakkezelő függvényét és paraméterként átadja neki az üzenetet.
Milyen módjai vannak az üzenet célablakhoz történő továbbításának?
Queued: Az üzenet bekerül az üzenetsorba és onnan továbbítódik az ablakkezelő függvénynek. -> post message
Not-queued: Az üzenetsor kikerülésével közvetlenül az ablakkezelő függvény kapja meg az üzenetet. -> send a messag
Qeued üzenetek működése
Minden thread rendelkezik üzenetsorral. Ebbe a sorba kerülnek a szálhoz érkező üzenetek és onnan továbbítódnak a megflelő ablakkezelő függvényhez, Ezeknek az üzeneteknek a feldolgozása asszinkron módon történik. Küldjük, nem várunk visszajelzést. Minden szál maga dolgozza fel az üzenetei és továbbítja azokat a megfelelő ablak ablakkezelő függvényének. Az üzenet feldolgozása FIFO módon történik.
Az üzenet bekerül egy System queue-ba, majd az applikáció szálához tartozó message queu-ba.