Klávesové zkratky na tomto webu - základní
Přeskočit hlavičku portálu


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

aktualizováno 
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ší

Během letu si chtěl natočit vedle letící letadlo, telefonu mu ovšem vypadl z...
Samsung mu vypadl z letícího letadla a nerozbil se

Může smartphone přežít pád ze 300 metrů, když i náraz z jen půlmetrové výšky mívá často fatální následky? Někdy zjevně ano. Třeba jeden tři roky starý Samsung...  celý článek

Nubia Z11 miniS
Nubia zlevnila i o více než tisíc korun. A rovnou všechny modely

Nubia zlevnila prakticky celý svůj sortiment na českém trhu. Hned několik modelů se tak dočkalo cenovky nižší i o více než tisíc korun.  celý článek

Google Pixel 2 od HTC.
Pixel 2 na prvním obrázku. Vypadá to na hodně konzervativní přístroj

Letos se dočkáme druhé generace smartphonů Pixel od Googlu. Základní model některými vlastnostmi možná nepříjemně překvapí. Jinak bude ze staré školy.  celý článek

S7 a S8 úvodní fotka
Takto vypadají vnitřnosti nejlepších samsungů. Je to úhledná práce

Viděli jste někdy „střeva“ telefonu? Během prohlídky servisního centra telefonů značky Samsung v rámci prodejny Alza v Holešovicích jsme měli možnost se...  celý článek

Soyes 6S
Nejmenší „iPhony“ na světě můžete mít za 1 300 korun

Kopie iPhonů nejsou žádnou novinkou, v čínských e-shopech jich najdeme desítky více či méně povedených. Mezi ty minimálně zajímavé patří mini smartphony Soyes....  celý článek

Další z rubriky

Find Wifi funkce na Facebooku
Ušetříte za mobilní data. Facebook vám ukáže bezplatnou wi-fi

V aplikaci sociální sítě Facebook se objevila nová užitečná funkce - dovede vás nasměrovat k nejbližší veřejné wi-fi síti.  celý článek

Nové parkovací automaty v Praze
Jak zaplatit za nové parkovací zóny v Praze? Mobil je téměř nutností

Nové zóny placeného stání startují dnes v pátém a šestém pražském obvodu. Zóny jsou rozděleny na tři typy a novinkou je placení za parkování mobilem. Aplikace...  celý článek

Ilustrační snímek
Nikam nevolali, přesto mají platit tisíce. Oškubala je „astro aplikace“

Tváří se jako rozšíření oblíbené mobilní hry, ve skutečnosti však ukrývá škodlivý kód. Ten bez vědomí uživatele uskutečňuje hovory na audiotexové linky, které...  celý článek

Najdete na iDNES.cz



mobilní verze
© 1999–2017 MAFRA, a. s., a dodavatelé Profimedia, Reuters, ČTK, AP. Jakékoliv užití obsahu včetně převzetí, šíření či dalšího zpřístupňování článků a fotografií je bez souhlasu MAFRA, a. s., zakázáno. Provozovatelem serveru iDNES.cz je MAFRA, a. s., se sídlem
Karla Engliše 519/11, 150 00 Praha 5, IČ: 45313351, zapsaná v obchodním rejstříku vedeném Městským soudem v Praze, oddíl B, vložka 1328. Vydavatelství MAFRA, a. s., je členem koncernu AGROFERT.