Premium

Získejte všechny články mimořádně
jen za 49 Kč/3 měsíce

Programování PocketPC naruby (11/12)

Patříte mezi uživatele PocketPC, kteří by si rádi také něco naprogramovali, řadíte se však k tzv. falešným začátečníkům? Pak právě vám je určen náš seriál věnovaný programování pro kapesní počítače s Windows Mobile. Dnešní díl věnujeme kontextové nabídce a synchronizaci dat.
Dnešním dílem seriálu Programování naruby navážeme na předchozí část věnovanou uživatelskému rozhraní a dialogu nastavení.

Kontextová nabídka

Jednou z novinek ve Windows CE 3.0 (jak nás upozorňuje průvodce po spuštění zařízení) je zavedení kontextové nabídky. Přidržíme-li stylus na jednom místě displeje, zobrazí se časovač (červené tečky obíhající hrot stylusu) a po nějaké době se zobrazí kontextová nabídka.

Zobrazení kontextové nabídky je ve všech verzích Microsoft Windows stejné, a to voláním funkce TrackPopupMenuEx, podobně jako v následujícím rámečku:


void ShowContextMenu(HWND hwnd, UINT x, UINT y)
{
    HMENU hmMenu = CreatePopupMenu();

    AppendMenu(hmMenu, MF_STRING, IDM_DELETEITEM, TEXT("Delete"));
    AppendMenu(hmMenu, MF_STRING, IDM_SWITCHICON, TEXT("Change icon"));

    TrackPopupMenuEx(hmMenu, 0, x, y, hwnd, NULL);

    DestroyMenu(hmMenu);
}

Pokud programujeme vlastní ovládací prvky, tak nám stačí zavolat funkci SHRecognizeGesture při zpracování události WM_LBUTTONDOWN. Parametrem funkce SHRecognizeGesture můžeme zvolit, zda tato funkce hodnotu GN_CONTEXTMENU vrátí, nebo zda ji odešle hlavnímu oknu aplikace jako upozornění pomocí zprávy WM_NOTIFY.

V aplikacích, které využívají standardní ovládací prvky Windows je však hlavnímu oknu aplikace odesíláno upozornění GN_CONTEXTMENU na zobrazení kontextové nabídky automaticky. Proto stačí doplnit do obsluhy události WM_NOTIFY následující řádek:


LRESULT MainWindowProc_Notify(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
    int code = ((LPNMHDR)lParam)->code;

    if(((LPNMHDR)lParam)->hwndFrom == g_hwndList)
    {
        ....
        else if(code == GN_CONTEXTMENU)
        {
            ShowContextMenu(hwnd, ((NMRGINFO*)lParam)->ptAction.x, ((NMRGINFO*)lParam)->ptAction.y);
        }
    }

    return 0L;
}

Přidržíme-li stylus nad nějakou položkou displeje delší dobu, zobrazí se jednoduchá kontextová nabídka, která umožní vybrat ze dvou možností. Pokud některou z nabízených možností využijeme, je hlavnímu oknu odeslána příslušná zpráva WM_COMMAND.

Synchronizace dat

V řadě případů potřebujeme, aby naše aplikace reagovala na nějakou systémovou událost, například na ukončení synchronizace. Operační systém Windows CE nabízí funkci CeRunAppAtEvent, která zajistí spuštění aplikace při uvedené události, například při změně systémového času nebo při ukončení synchronizace.

Je-li aplikace spuštěna automaticky, je jí na příkazové řádce předán parametr, kterým je předdefinovaný textový řetězec. Aplikace nesmí v takovém případě zablokovat systém a neměla by ani spouštět svoji kopii. Ve většině případů aplikace testuje, zda již neběží v pozadí. Pokud ano, pošle hlavnímu oknu dříve spuštěné aplikace zprávu, která způsobí například aktualizaci dat po ukončení synchronizace.

Jakmile si aplikace již nepřeje být spouštěna při dané události, odregistruje se voláním funkce CeRunAppAtEvent s parametrem NOTIFICATION_EVENT_NONE.

V naší aplikaci potřebujeme reagovat na událost konce synchronizace jen tehdy, je-li aplikace spuštěna, například v pozadí. V takovém případě potřebujeme znovu načíst datový soubor; jinak by mohlo dojít k jeho neúmyslnému přepsání.


int WINAPI WinMain(HINSTANCE hInstance, 
                   HINSTANCE hPrevInstance, 
                   LPTSTR lpCmdLine, 
                   int nCmdShow)
{
    ...

    HWND hwndMain = FindWindow(g_szClass, szName);

    if(wcscmp(lpCmdLine, APP_RUN_AFTER_SYNC) == 0)
    {
        if(hwndMain) // Pokud je spuštěna předchozí instance aplikace
        {
            SendMessage(hwndMain, MWM_RELOAD, 0, 0L);
            return 0;
        }
    }
    else 
    {
        if(hwndMain)
        {
            SetForegroundWindow(hwndMain);
            return 0;
        }
    }

    ...

    // registrace k přijímání zprávy
    
    TCHAR myname[MAX_PATH];
    GetModuleFileName(g_hInstance, myname, MAX_PATH);
    CeRunAppAtEvent(myname, NOTIFICATION_EVENT_SYNC_END);

    ... registrace a vytvoření okna ...    

    ShowWindow(hwndMain, nCmdShow); 

    ... smyčka zpracování událostí ...

    // zrušení registrace před ukončením programu
    
    CeRunAppAtEvent(myname, NOTIFICATION_EVENT_NONE);

    return 0;
}

Zase vše propojíme

Teď již máme navrženou plnohodnotnou Pocket PC aplikaci, která je (byť velmi omezeně) schopna synchronizovat data se stolním počítačem. Tento příklad snad demonstroval, že vytváření aplikací pro Microsoft Windows, včetně jajich kapesní verze, je v základech velmi podobné; liší se pouze některé techniky, které jsou však poměrně podrobně zdokumentovány.

Jednotlivé soubory získáte kliknutím na následující ikony (programy v ZIP archivu):

Zde můžete stáhnout zdrojové texty programu, určené pro Microsoft Embedded Visual C++ 3.0.
Zde můžete stáhnout spustitelný soubor.

Závěr

Děkuji všem čtenářům, že měli dostatek trpělivosti a dostali se až na konec minisérie. V příštím dílu bude jejich odměnou automatický generátor aplikací pro Pocket PC a Embedded Visual C++ 3.0. Screenshot, který vás má navnadit a který ilustruje vytvoření položky do obrazovky Today , si můžete prohlédnout zde:

  • Nejčtenější

Nejhorší noční můra, řekla žena, která v botě syna objevila cizí AirTag

20. května 2024

Mého syna někdo sleduje. S takovým pocitem několik týdnů žila žena z Floridy poté, co na svůj...

Chystá se velká rošáda u iPhonů. Modely Plus končí, náhrada je zajímavá

14. května 2024

Modely Plus se prodávají z celé současné modelové nabídky Applu mezi smartphony nejhůře. U iPhonu...

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

Chyba v novém systému pro iPhony dokáže oživit „zombie“ fotografie

17. května 2024  13:18

Nový systém iOS pro iPhony trpí zvláštní chybou. Uživatelům se objevují i roky smazané fotografie....

KVÍZ: Na Temu a AliExpressu lze koupit ledacos. Poznáte účel zboží?

15. května 2024

Na čínských nákupních portálech už nějakou dobu kupujeme různé podivné příslušenství k mobilům a...

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

Žebříček fotomobilů má nového krále. Soupeřům dost odskočil

14. května 2024  7:02

S novým modelem Pura 70 Ultra opět Huawei ovládl žebříček fotomobilů organizace DxO Mark. Huawei...

Bomba od Viva aspiruje na nejlépe fotící smartphone všech dob

21. května 2024

Čínský výrobce smartphonů Vivo představil spolu s modely X100s a X100s Pro svůj top model pro...

O2 opět láká na levnější neomezená data. Slevu však trochu zkrouhlo

20. května 2024  7:02

O nové zákazníky začal usilovat i operátor O2. Znovu se zaměřil na svůj základní datově neomezený...

Nejhorší noční můra, řekla žena, která v botě syna objevila cizí AirTag

20. května 2024

Mého syna někdo sleduje. S takovým pocitem několik týdnů žila žena z Floridy poté, co na svůj...

Němci musejí pro smartphony Motoroly třeba do Česka. Doma je teď nekoupí

19. května 2024  8:01

Německý soud nařídil v zemi zákaz prodeje mobilních zařízení značky Lenovo a Motorola. Společnost,...

Pracující důchodce skončil po nehodě bez příjmů. Účty poplatil díky životnímu pojištění
Pracující důchodce skončil po nehodě bez příjmů. Účty poplatil díky životnímu pojištění

Spousta důchodců si dnes přivydělává, aby zvládli zaplatit stále rostoucí výdaje a nemuseli se spoléhat na pomoc svých blízkých. Podobně tomu bylo...

Nejhorší noční můra, řekla žena, která v botě syna objevila cizí AirTag

Mého syna někdo sleduje. S takovým pocitem několik týdnů žila žena z Floridy poté, co na svůj iPhone začala dostávat...

Zemřel Vlastimil Harapes. Baletní mistr Národního divadla i českých filmů

Ve věku 77 let zemřel tanečník a herec Vlastimil Harapes. Dlouhá léta byl sólistou baletu Národního divadla. Zahrál si...

Anální sex je výzva. Nejvíc tabu je však v Česku jiná praktika, říká průzkum

Erotické hračky nepředstavují podezřelou exotiku, v ložnicích jsou jako doma. Ostatně jako masturbace. I orální sex....

Svěrák se na mě nedíval jen jako na hezkou buchtu, říká Radka Pavlovčinová

Jan Svěrák ji vidí jako robotku. Radka Pavlovčinová v nové hře filmového a teď už i divadelního režiséra hraje umělou...

Zásnubní šaty elegantní princezny. Spustily Kate efekt, návrhářku zničily

Seriál Když si jeho šaty oblékne některá z členek královské rodiny, obvykle to každý návrhář oslavuje jako životní úspěch....