Premium

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

Programování pro PocketPC - Aplikace založené na dialogu 4/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.

Dialogy programovatelné v HTML

Věřte nebo ne, ale na počítačích s operačním systémem PocketPC je velmi jednoduché naprogramovat aplikaci, která s uživateli komunikuje prostřednictvím uživatelského rozhraní, popsaného v jazyce HTML. Je to možné díky komponentě HtmlViewer, která nemá svoji paralelu na stolních Windows.

Do námi vytvořeného dialogu je možné komponentu přidat vložením uživatelem definovaného ovládacího prvku (Custom control), který do dialogu vložíme pomocí ikony vpravo. Ve vlastnostech prvku pak nastavíme jméno třídy na DISPLAYCLASS:

Posledními dvěma podmínkami pro úspěšné používání dialogů založených na HTML je přidání knihovny htmlview.lib na záložce Link nastavení projektu a inicializace, kterou provedeme ve funkci WinMain:

InitHTMLControl(hInstance);

S prohlížečem HTML komunikujete pomocí zpráv, které mu zasíláte; nejdůležitější zprávy jsou následující:

DTM_CLEAR Vymaže obsah prohlížeče HTML.
DTM_ADDTEXTW Přidává text do prohlížeče; pokud má wParam hodnotu FALSE, přidává se text jako HTML, jestliže má hodnotu TRUE, tak nejsou interpretovány HTML formátovací značky.
DTM_ENDOFSOURCE Označuje konec dokumentu a umožňuje jej vykreslit.
DTM_SETIMAGE Používá se při asociaci bitmapy s parametrem src prvku img.
DTM_NAVIGATE Přejde na libovolné zvolené URL.

Takže jednoduchý HTML formulář vytvoříme například voláním následujících funkcí při zpracování události WM_INITDIALOG (uznávám, že jeho design je spíše ... strohý):

hwndHTML = GetDlgItem(hDlg, IDC_FRAME);
SendMessage(hwndHTML, DTM_CLEAR, 0, 0L);
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("<HTML><BODY><P>Toto je text, <b>tucne</b> a <i>kurziva</i></P>"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("<CENTER><A HREF=MujHyperlink>Hyperlink</A><BR>"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("<FORM method=post action=MujFormular>"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("<INPUT TYPE=checkbox NAME=skrt /> Zaskrtni<BR>"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("Napis: <INPUT TYPE=text SIZE=10 NAME=edituj /><BR>"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("<INPUT TYPE=submit VALUE=Stiskni />"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("</FORM></CENTER>"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("<INPUT TYPE=button VALUE=Konec NAME=Konec /><BR>"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("</CENTER>"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("</BODY></HTML>"));
SendMessage(hwndHTML, DTM_ENDOFSOURCE, 0, (LPARAM)NULL);

Ovládací prvek zobrazující HTML, který jsme vložili do formuláře, zasílá funkci dialogu zprávy WM_NOTIFY. Tyto zprávy informují funkci dialogu o kliknutí na odkaz, nutnosti načíst obrázek a podobně. Jednoduchý příklad zpracování zprávy WM_NOTIFY je následující:

case WM_NOTIFY:
    if(LOWORD(wParam) == IDC_FRAME)
    {
        NM_HTMLVIEW *pn = (NM_HTMLVIEW *)lParam;

        if(pn->hdr.code == NM_HOTSPOT && pn->szTarget)
        {
            if(_tcscmp(pn->szTarget, TEXT("MujFormular")) == 0)
            {
                MessageBox(hDlg, pn->szData, TEXT("Formular"), MB_OK);
                return TRUE;
            }
            else if(_tcscmp(pn->szTarget, TEXT("Konec")) == 0)
            {
                PostQuitMessage(0);
                return TRUE;
            }
// ...
            return FALSE;
    }            
    break;

Tučně zvýrazněný text v obou příkladech zdrojového kódu jsou jména hyperlinků, které definujeme v našem HTML kódu a na něž můžeme reagovat při zpracování notifikace NM_HOTSPOT.

Současně není jednodušší věc, než "přepínání formulářů". Prostou změnou obsahu prvku pro prohlížení HTML (sekvence zpráv DTM_CLEAR, DTM_ADDTEXTW a DTM_ENDOFSOURCE) zaměníte prohlížený dokument za jiný.

Prvek pro prohlížení HTML v sobě obsahuje celou funkcionalitu Pocket Internet Exploreru, která je sice hluboko pod úrovní stolních prohlížečů, ale přesto umožňuje vytvořit elegantní uživatelské rozhraní.

Jako vždy, příklad naleznete ke stažení (ZIP) zde.


V dalším dílu si do aplikace založené na dialogu přidáme prázdné hlavní okno programu a naznačíme si, jak simulovat přepínání dialogů v uživatelském rozhraní počítačů s PalmOS.

  • 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...

Hlasujte o nejlepší sportovní fotku. Vyberete tak vítěze smartphonu vivo

26. dubna 2024

Soutěž o úplnou novinku, smartphone vivo V40 SE s bohatou výbavou nebo podepsaný dres...

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...

Akční letáky
Akční letáky

Všechny akční letáky na jednom místě!

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...