Kurz1 - Kapitola3

17. června 2007 v 16:12 | http://www.sweb.cz/kurz_evt/ |  Programování pro WinCE

2.2 Druhá verze programu "Ahoj"

V minulém díle jsme si vytvořili první pokusný program, který vypisoval hlášení s pozdravem. Pokud se budete chtít k němu vrátit a znovu si jej prohlédnout stačí zvolit z nabídky File -> Recent Workspaces -> C:\Pokusy\Ahoj\Ahoj.
Nás ale bude zajímat nový program. Jestli si vzpomínáte, při vytváření Workspace pro náš první program nám eVC nabídl ve druhém okně (mimo jiné) možnost volby "A typical "Hello World" application". My jsme sice ze cvičných důvodů zvolili prázdný projekt ("An empty project"), nyní však použijeme tuto možnost pro seznámení se strukturou klasického Windows programu.
Opět tedy zvolte File -> New a v políčku Project name zadejte např. jméno "Nazdar". Jako typ projektu opět použijeme "WCE Application". Na panelu druhé volby teď zvolíme "A typical "Hello World" application" a necháme eVC, aby dokončilo celý projekt.
V levém okně se nám proti předcházejícímu příkladu objevily tři záložky. ClassView nám dává přehled o třídách a proměnných použitých v našem projektu. ResourceView udržuje přehled a přístup k tzv. "Resource", což jsou ikony, menu a další grafické a jiné zdroje použité v programu. Poslední záložka FileView představuje přehled o souborech zařazených do projektu. Nás bude zajímat pro jednoduchost pouze soubor Nazdar.cpp.

obr. 7 FileView

Dvojklikem na tento soubor jej otevřeme v pravém okně. Můžete si jej prohlédnout. Možná vás překvapí, že vytvoření "Hello World" programu, který má zobrazit jenom pozdrav, způsobilo vygenerování tak rozsáhlého zdrojového kódu. Je to dáno tím, že v našem prvním příkladě jsme použili standardní funkci, která zajistí obsluhu všech událostí týkajících se okna našeho programu. V právě vygenerovaném příkladě se však o všechny události staráme sami.
Zvolte si odpovídající typ OS a procesoru a sestavte program. Výsledkem by měl být program odpovídající následujícímu obrázku.

obr. 8 "A typical Hello World application"

Po spuštění programu zjistíte, že tento pozdrav je podstatně složitější. Kromě samotného pozdravu se v programu objevila nabídka obsahující dvě položky File a Help. Pod volbou File najdete možnost ukončit program a volba Help nabízí také jednu položku About (zobrazená na obr. 8). O vytvoření a obsluhu těchto funkcí se musí postarat program.
Je na čase podívat se, jak funguje program pro Windows.

2.3 Rozdíl mezi programem pro DOS a Windows

Při úspěšném zvládnutí kurzu programovacího jazyka C nebo Pascal obvykle absolventovi zůstanou utajeny speciality programování pro Windows. Je to dáno tím, že standardní jazyk pokládá program za posloupnost příkazů postupně vykonávaných jeden po druhém. A tak když je potřeba např. počkat na potvrzení hlášení na obrazovce uživatelem, program se jednoduše zastaví ve smyčce a čeká (možná si vzpomenete na častý příkaz používaný v Turbo Pascalu: "repeat until keypressed;"). :-)
Ve Windows může být na rozdíl od DOSu současně spuštěno více úloh. Podobný příkaz by znamenal zablokování počítače ve smyčce a tím i zastavení běhu jiných programů.
Program napsaný pro Windows proto počítá s tím, že musí jeden stroj sdílet s více úlohami. Po úvodních inicializačních procedurách přejde do tzv. smyčky zpráv.

obr. 9 Struktura programu pro Windows

Lze si zjednodušeně představit, že program pro Windows zajišťuje pouze služby pro příslušné okno na obrazovce počítače. Po inicializaci předá vládu nad počítačem opět operačnímu systému a ten si program zavolá vždy, když je potřeba zpracovat nějakou událost. Např. operační systém může zavolat program: "Byla stisknuta klávesa A - obsluž to!" nebo: "Kliknutí myši na souřadnici XY - obsluž to!".
U programů pro Windows tuto činnost zajišťuje zmíněná smyčka zpráv:
   // Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

Funkce GetMessage předá řízení zpět do operačního systému a ten se k programu vrátí a jako výstupní parametr dodá až událost, kterou je potřeba obsloužit. Windows všechny události předávají pomocí tzv. zpráv. Ty je možné posílat z vašeho programu i jiným programům nebo je může program posílat sám sobě.
Další funkce Translate... provádějí klávesnicové převody zpráv a funkce DispatchMessage předá zprávu zpět operačnímu systému, aby ji doručil do tzv. procedury okna ke zpracování.

2.4 Varianty programu

Na závěr tohoto dílu malinko odbočíme a podíváme se na rozdíl mezi možnými variantami programu. Možná jste si všimli, že program na obrázku č. 8 vytvořený jako "WCE Application" a spuštěný pod Pocket PC verzí Windows CE má v pravém horním rohu podivný černý čtvereček. Pokud jej ale spustíte v operačním systému Windows CE 2.11, je vše O.K.

obr. 10 "Hello World" v emulátoru Palm PC 2.11
Rozdíl způsobuje nová verze systému Pocket PC, u které se nepředpokládá vypínání programů. Programy v počítači běží jakoby trvale, uživatel mezi nimi pouze přepíná. eVC už pro tyto programy negeneruje vypínací funkce. Budete-li chtít tvořit pro Pocket PC, zvolte na úvod typ projektu "WCE Pocket PC Application" a eVC vám přichystá kostru programu pro tuto verzi systému. Viz následující obrázek:

obr. 11 Varianta "Hello World" pro Pocket PC

Co bychom si měli z této lekce zapamatovat?

  • eVT vám může připravit kompletní program pro Windows CE nebo jeho kostru.
  • Mezi programy pro DOS a Windows je rozdíl v toku zpracování instrukcí.
  • Program pro Windows obsluhuje zprávy (události), které dostává z OS.
  • Zprávy jsou předávány ke zpracování tzv. "smyčkou zpráv".
  • Programy pro jednotlivé verze Windows CE mají trochu odlišný vzhled a funkce.
 

Buď první, kdo ohodnotí tento článek.

Nový komentář

Přihlásit se
  Ještě nemáte vlastní web? Můžete si jej zdarma založit na Blog.cz.