V několika následujících dílech si při postupném vytváření hexadecimálního prohlížeče souborů ukážeme některé odlišnosti specifické pro operační systém Windows CE. Vlastní program a jeho tvorba se velmi podobá verzi, kterou bychom tvořili pro Windows 95 a vyšší. Jsou zde však odchylky charakteristické pro systém kapesních počítačů. Těmito odchylkami se budeme zabývat podrobněji.
V dnešním dílu si připravíme základ programu, který budeme dále zdokonalovat. Na úvod necháme AppWizard, aby za nás udělal "špinavou práci", - tj. vytvořil standardní tělo programu. Vytvořte nový projekt typu "WCE Application" pojmenovaný "HexaView". Jako typ zvolte opět "Hello World!" aplikaci.
Celý příklad programu bude ukazován na starší verzi (pro Windows CE 2.11). Snahou je, aby si mohli postup vyzkoušet i majitelé starších počítačů. Starší verze funguje i na Pocket PC, naopak to však neplatí. Případný zájemce si může tvořit program založený na Pocket PC aplikaci. V místech, kde se verze operačního systému odlišují, bude upozornění.
Pokud se vám podařilo aplikaci úspěšně vygenerovat a případně i přeložit a vyzkoušet, můžeme přikročit k jejím úpravám. Otevřete si soubor HexaView.cpp, většina úprav se bude odehrávat zde.
Vzhledem k tomu, že nebudeme vytvářet rozsáhlý projekt, všechny obecně potřebné hodnoty uložíme do globálních proměnných programu, případné lokální proměnné bude obsahovat pouze funkce WndProc.
Úpravy zahájíme přidáním globálních proměnných na místo v úvodu souboru, kde si již AppWizard vložil své globální proměnné:
Abychom mohli nějaká data zobrazovat, vytvoříme si zatím buffer o velikosti 1 kB. K tomu využijeme ukazatel pBuffer a máme připravenou konstantu velikosti BUFSIZE. Proměnné nMaxPocet a nZobrByte uschovávají velikost bufferu, resp. místo, odkud zobrazuji data. Následující 3 proměnné slouží k uchování hodnot pro zobrazování na displeji. Pro začátek jsou inicializovány na zkusmo odhadnuté hodnoty. Postupně budou při úpravě programu nahrazeny vypočítanými přesnými čísly. Logická proměnná bSTextem určuje, zda se zobrazují pouze holá hexadecimální čísla nebo je doplněn i obraz znaku odpovídajícího příslušné hodnotě. V poslední proměnné rctKlient budeme mít souřadnice klientské oblasti okna.
Nyní si doplníme několik lokálních proměnných na začátek funkce WndProc:
Jejich význam bude zřejmý při zpracování zpráv ve funkci WndProc. V tomto díle se dotkneme pouze tří zpráv: WM_CREATE, WM_PAINT a WM_DESTROY.
Jako první začneme se zprávou WM_CREATE. Při vytváření okna, je vhodná doba pro vytvoření bufferu s daty a inicializaci některých proměnných. Tato část programu je provizorní a při dalších úpravách ji budeme postupně rušit. Na konec zpracování zprávy WM_CREATE vložte:
Nejprve si v paměti alokujeme místo pro buffer se zobrazovanými daty a potom si tento buffer několikrát naplníme postupně vzrůstající posloupností čísel od 0 do 255.
Na závěr jsou nastaveny hodnoty některých proměnných. Globální proměnné jsou inicializovány již při své deklaraci, zde je nastavení přidáno pouze jako imitace otevření souboru a zpracování zprávy WM_PAINT, které doplníme později. Doporučuji po závěrečném přeložení a spuštění vyzkoušet změnu nZobrByte a rctKlient.top např. na 50 a porovnat zobrazená data.
Největší změnu zaznamená zpracování zprávy WM_PAINT. Její kód nahradíme následujícím kouskem programu.
V programu jsou doplněny komentáře, není jej tedy asi nutné příliš rozebírat. Proměnné pPomUkaz slouží jako ukazatele na právě zobrazovaný Byte. První je pro číselné hodnoty, druhá pro textovou část. V proměnné y je uložena souřadnice, kde na obrazovce vykreslujeme řádek. K vlastnímu zobrazení dat použijeme funkci ExtTextOut, která je vhodná pro vypsání jednořádkového textu.
Na závěr ještě vložíme na začátek zpracovaní zprávy WM_DESTROY likvidaci námi vytvořeného bufferu:
A aby nás překladač zbytečně nevaroval, že lokální proměnná szHello není použita, můžeme ji zrušit.
Máte-li vše upraveno, můžete zkusit program přeložit a spustit. Po spuštění by se na obrazovce počítače mělo objevit něco podobného:
V rámci testu vytvořeného programu je možné postupně zkusit změnit hodnoty proměnných nSloupce (např. na 8), nLinek (10), bSTextem (FALSE), nVyskaRadku (20). Kdo si v AppWizardu založil aplikaci jako Pocket PC, nepotřebuje "přeskakovat" nahoře v okně nabídkový pruh a může snížit hodnotu rctKlient.top na 0. Pro kontrolu při dalších dílech doporučuji proměnné vrátit na původní hodnoty.
Stránka načtena za 0.00195 sekund.