Premium

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

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ší

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

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

Váš iPhone může být hacknut, varuje Apple uživatele v desítkách zemích

27. dubna 2024

Jednotlivci z řad uživatelů iPhonů z více než devadesáti zemí světa obdrželi ve středu 10. dubna od...

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

Dětem neprodáváme. Britské děti si dost možná už smartphone nekoupí

27. dubna 2024

Premium Britští ministři zvažují přijetí zákona, který by omezoval prodej smartphonů. Jsou totiž...

Honor našel skulinu v testech. Tváří se jako nejlepší ve výdrži baterie

30. dubna 2024  7:02

Výrobci mobilních telefonů se snaží uživatele zaujmout všemi možnými způsoby. Těmi jsou samozřejmě...

Do Evropy zamíří další skládačka. Na konkurenci zaútočí hlavně cenou

30. dubna 2024

Evropský trh se skládacími smartphony se zase o něco málo zahustí. Zamíří na něj totiž novinka...

Další chytrý prsten na obzoru. Má být levný a ještě vám posvítí na cestu

29. dubna 2024

Společnost Black Shark představila pro domácí, čínský trh vlastní chytrý prsten. Model Black Shark...

Do konce měsíce výhodná střední třída. Test smartphonu Vivo V40 SE

28. dubna 2024

Vivo uvedlo do střední třídy smartphonů zajímavý stylový model V40 SE. Ten je důkazem toho, jak...

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

Horňáci versus dolňáci. Víme, čemu muži dávají přednost, a je to překvapení

Ženské tělo je pro muže celkově velmi atraktivní a nabízí jejich očím mnoho zajímavých partií. Největší pozornosti se...

Hello Kitty slaví padesátiny. Celý svět si myslí, že je to kočička, jenže není

Kulatý obličej se dvěma trojúhelníkovýma ušima, drobný čumáček, vousky a červená mašle na uchu. Taková je Hello Kitty,...

KOMENTÁŘ: Z Davida Černého se stal parazit. O umění už dávno nejde

Premium Když se David Černý v televizi pohádal s kurátorkou Marií Foltýnovou, spory o jeho plastiku na obchodním domě Máj...

Muž má recept na dlouhověkost, v jednašedesáti je ve skvělé formě

Dave Pascoe chce dokázat světu, že i v důchodu můžete vypadat jako za mlada a také se tak cítit. Stačí dodržovat pár...