Premium

Získejte všechny články
jen za 89 Kč/měsíc

Programování pro PocketPC - Aplikace založené na dialogu 3/6

Aplikace založené na dialogu jsou tím naprosto nejjednodušším druhem aplikací pro počítače s operačním systémem založeným na Microsoft Windows, včetně zařízení PocketPC. Ukážeme vám, jak je naprogramovat a k čemu všemu mohou sloužit.

Aplikace založené na dialogu jsou tím naprosto nejjednodušším druhem aplikací pro počítače s operačním systémem založeným na Microsoft Windows, včetně zařízení PocketPC. V této minisérii budeme mluvit o aplikacích založených na různých typech dialogů a ukážeme si, že je velmi jednoduché je naprogramovat a jdou používat nejen k vytváření jednoduchých aplikací, ale například i k "simulaci" uživatelského rozhraní PalmOS.

Pro začátečníka je často první úspěšně přeložená a fungující aplikace založená na dialogu vstupenkou do světa programování v operačním systému Windows CE.

"Nový" vzhled PocketPC dialogů

S příchodem počítačů typu PocketPC přestal klasický vzhled dialogů stačit. Dialogy nového stylu nemají titulkový pruh a jsou vždy roztaženy přes celý displej. Standardním prostředkem ukončení dialogu se stalo tlačítko (OK) v pravém horním rohu dialogu. Tlačítko (OK) má standardně identifikátor IDOK.

Jedinou významnou slabinou ovládání nových dialogů je chybějící standardizovaný způsob, jak dialog ukončit bez uložení informací. Pokud si přejeme dát uživateli možnost ukončit dialog bez uložení informací, musíme buď sami doplnit do dialogu tlačítko Zruš/Cancel, nebo toto tlačítko umístit do řádku MenuBar.

I nový vzhled dialogu nastavujeme při inicializaci dialogu při obsluze zprávy WM_INITDIALOG. Vuláme funkci SHInitDialog, které předáme vyplněnou strukturu SHINITDLGINFO:

SHINITDLGINFO shidi;
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIZEDLGFULLSCREEN;
shidi.hDlg = hDlg;
SHInitDialog(&shidi);

Pomocí příznaku SHIDIM_FLAGS zvolíme, že si přejeme nastavit typ dialogu, příznak SHIDIF_SIZEDLGFULLSCREEN zvolí právě námi požadovaný "nový" vzhled dialogu. Význam příznaku SHIDIF_DONEBUTTON je následující:

SHIDIF_DONEBUTTON | SHIDIF_SIZEDLGFULLSCREEN V pravém horním rohu je tlačítko (OK), které po stisknutí generuje zprávu WM_COMMAND s identifikátorem IDOK.
pouze SHIDIF_SIZEDLGFULLSCREEN V pravém horním rohu je zobrazeno tlačítko s křížkem; stidknutí tohoto tlačítka přenese aplikaci do pozadí.

Každé kliknutí na ikonu naší aplikace je vytvořeno nové okno dialogu. Toto chování není zdaleka optimální - pokud například uživatel začne psát text, přepne se do jiné aplikace a znovu klikne na ikonu v seznamu aplikací, spustí se nová instance aplikace i dialogové okno. Současně může narůstat počet spuštěných kopií naší jediné aplikace.

Proto je výhodné testovat po spuštění naší aplikace, zda není již náš dialog zobrazen. Nejjednodušším způsobem je použití funkce FindWindow, která vyhledá okno v závislosti na jeho třídě a titulku. Dialogy mají vždy třídu oken DIALOG, hledaný titulek okna je totožný s titulkem dialogu:

HWND hwnd = FindWindow(TEXT("DIALOG"), TEXT("Pokus 3"));

if(hwnd)
{
    SetForegroundWindow(hwnd);
    return 0;
}

Pokud naši aplikaci nyní spustíme opakovaně, pokusí se nejprve vyhledat svoji dříve spuštěnou kopii a pokud existuje, tak ji zobrazí pomocí funkce SetForegroundWindow a ukončí se. Výsledkem bude uživatelův pocit, že pracuje s jednou aplikací, do které se může přepínat pomocí ikony v seznamu aplikací.

Pokud potřebujeme změnit nebo upravit titulek okna, voláme funkci SetWindowText, která funguje i na titulky dialogů.

Zdrojový text příkladu si můžete stáhnout (ZIP) zde.

Vytváření uživatelského rozhraní v eVC++

Při práci s "novými" dialogy v eVC++ se setkáte s tím, že budete muset odhadnout velikost vytvářeného dialogu. Bylo by sice logické, aby eVC++ obsahoval nějaký vzor pro dialogy přes celý displej, ale není tomu tak. Lepší, než určovat velikost dialogu metodou pokus-omyl je následující výpočet:

Velikost dialogu se udává tradičně v "dialogových jednotkách". Jedna takováto jednotka šířky je definována jako 1/4 průměrné šířky použitého písma a dialogová jednotka výšky je definována jako 1/8 průměrné výšky použitého písma. Pro počítače PocketPC, kde je standardní písmo MS Sans 8, které je vysoké asi 14 pixelů a široké asi 7 pixelů nám vychází maximální velikost dialogu přibližně na 137 x 154 dialogových jednotek:

šířka 240 pixelů / 7 * 4 = 137 d.u.
(výška 320 pixelů - titulek okna - command bar = 270 pixelů) / 14 * 8 = 154 d.u. 

Pokud vytvoříme dialog menší, než je displej, bude automaticky rozšířen. Překročíme-li však rozměry displeje, mohou se některé ovládací prvky dostat za hranice displeje a uživatel s nimi nebude moci pracovat.


V příštím díle budeme mluvit o aplikacích, které jsou založeny na uživatelském rozhraní programovatelném v HTML.

  • Nejčtenější

Spotem s Trojanem na horách operátor popudil Poláky. Nerozuměli nadsázce

21. dubna 2024  8:01

Po dvojici Vojtěch Kotek a Lukáš Pavlásek, k níž později přibyl Jakub Kohák, vsadil T-Mobile ve...

Je to už spíš foťák s mobilem a opravdu se povedl. Test Xiaomi 14 Ultra

21. dubna 2024

Prémiový smartphone Xiaomi 14 Ultra působí mezi současnou nabídkou mobilů jako unikát. Jaký jiný...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Toto zařízení mělo nahradit mobily. V recenzích se mu vysmáli

23. dubna 2024

Novinka s názvem Humane AI Pin se zdála být převratným zařízením. V mnoha ohledech měla nahradit...

Vodafone měl výpadek, někteří zákazníci se nemohli dovolat

25. dubna 2024  10:03,  aktualizováno  10:15

Síť mobilního operátora Vodafone postihl ráno výpadek. Týkal se části zákazníků, kteří se nemohli...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Operátoři zahušťují pokrytí Česka signálem 5G. Máte ho doma? Podívejte se

20. dubna 2024

Premium V červenci to budou již čtyři roky, co byla v Česku spuštěna první komerční 5G síť. Zatímco v...

Xiaomi už se nebude držet zpátky. Pro řadu T chystá další prémiové funkce

26. dubna 2024

Smartphony řady T od Xiaomi mají vždy parádní výbavu, ale zároveň i pár kompromisů, aby trochu...

Vodafone měl výpadek, někteří zákazníci se nemohli dovolat

25. dubna 2024  10:03,  aktualizováno  10:15

Síť mobilního operátora Vodafone postihl ráno výpadek. Týkal se části zákazníků, kteří se nemohli...

Toto mohl být nevídaný smartphone. Myšlenku však nakonec poslali k vodě

25. dubna 2024

S takovým smartphonem bychom už nikdy nemuseli řešit, že se zpomaluje, nemá dostatek paměti či je...

Samsung má povedenou stylovku. Zkusí to s ní na trhu, kde se mu nedaří

24. dubna 2024

Samsung po velmi dlouhé době oprášil modelovou řadu Galaxy C a představil stylový smartphone se...

Bývalý fitness trenér Kavalír zrušil asistovanou sebevraždu, manželka je těhotná

Bývalý fitness trenér Jan Kavalír (33) trpí osmým rokem amyotrofickou laterální sklerózou. 19. dubna tohoto roku měl ve...

Herečka Hunter Schaferová potvrdila románek se španělskou zpěvačkou

Americká herečka Hunter Schaferová potvrdila domněnky mnoha jejích fanoušků. A to sice, že před pěti lety opravdu...

Největší mýty o zubní hygieně, kvůli kterým si můžete zničit chrup

Možná si myslíte, že se v péči o zuby orientujete dost dobře, přesto v této oblasti stále ještě existuje spousta...

Tenistka Markéta Vondroušová se po necelých dvou letech manželství rozvádí

Sedmá hráčka světa a aktuální vítězka nejprestižnějšího turnaje světa Wimbledonu, tenistka Markéta Vondroušová (24), se...

Za vytlačení z linky do Brna musí Student Agency zaplatit náhradu 21 milionů

Společnost Student Agency provozující autobusy a vlaky pod označením RegioJet musí zaplatit bývalému konkurentovi 21...