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

Zvláštním případem dialogů jsou vícestránkové dialogy typu PropertySheet. Jsou složeny z několika stránek, mezi kterými se můžeme přepínat pomocí záložek na vrchu nebo na spodku displeje.

Každá strana je definována jako vlastní dialog a může (ale nemusí) obsahovat vlastní funkci dialogu. Z jedné strany na druhou můžeme přecházet nejen kliknutím na záložku, ale i pomocí makra PropSheet_SetCurSel. Potřebujeme-li jednoduchou aplikaci založenou na několika dialozích mezi kterými se přepínáme, je velmi jednoduché využít právě PropertySheet.

Podobně jako voláme dialog pomocí funkce DialogBox, voláme PropertySheet pomocí funkce PropertySheet, které předáváme vyplněnou strukturu PROPSHEETHEADER. Struktura PROPSHEETHEADER musí být naplněna odkazem na všechny stránky, podobně jako v následujícím příkladu:

#define PAGES   4

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

	PROPSHEETPAGE psp;
	HPROPSHEETPAGE hpsp[PAGES];
	PROPSHEETHEADER psh;

// Pripravime si strukturu pro jednu stranku
	
	memset(&psp, 0, sizeof(PROPSHEETPAGE));
	psp.dwSize = sizeof(PROPSHEETPAGE);
	psp.dwFlags = PSP_DEFAULT;
	psp.hInstance = g_hInst;
	psp.pfnDlgProc = MainDlgProc;

// Vložíme první stránku
	
	psp.pszTemplate = MAKEINTRESOURCE(IDD_P1);
	hpsp[0] = CreatePropertySheetPage(&psp);

// Vložíme druhou stránku
	
	psp.pszTemplate = MAKEINTRESOURCE(IDD_P2);
	hpsp[1] = CreatePropertySheetPage(&psp);

// Vložíme třetí stránku

	psp.pszTemplate = MAKEINTRESOURCE(IDD_P3);
	hpsp[2] = CreatePropertySheetPage(&psp);

// Vložíme čtvrtou stránku - zatímco všechny předchozí strany měly
// stejnou funkci dialogu, čtvrtá stránka má navíc definovánu vlastní funkci
// dialogu  
	
	
	psp.pszTemplate = MAKEINTRESOURCE(IDD_P4);
	psp.pfnDlgProc = Page3DlgProc;
	hpsp[3] = CreatePropertySheetPage(&psp);

// Naplníme strukturu PROPSHEETHEADER

	memset(&psh, 0, sizeof(PROPSHEETHEADER));
	psh.dwSize = sizeof(PROPSHEETHEADER);
	psh.dwFlags = PSH_NOAPPLYNOW|PSH_MAXIMIZE|PSH_USECALLBACK;
	psh.hwndParent = GetDesktopWindow();
	psh.hInstance = g_hInst;
	psh.nPages = PAGES;
	psh.nStartPage = 0;
	psh.phpage = hpsp;
	psh.pfnCallback = PropSheetCallback;

	PropertySheet(&psh);
    return 0;
}

Nesmíme zapomenout volat funkci InitCommonControls, která v naší aplikaci inicializuje rozšířené ovládací prvky uživatelského rozhraní, mezi které PropertySheet patří.

Vzhled PropertySheet můžeme nastavit ve funkci PropSheetCallback, jejíž adresu vkládáme do struktury PROPSHEETHEADER. Pokud funkci PropSheetCallback neuvedeme, použije operační systém PocketPC starší verzi dialogu se záložkami nahoře

Nová verze Stará verze
static int CALLBACK 
PropSheetCallback(HWND, UINT, LPARAM)
{
    switch(message) 
    {
        case PSCB_GETVERSION:
            return COMCTL32_VERSION;
	}

	return 0;
}
static int CALLBACK 
PropSheetCallback(HWND, UINT, LPARAM)
{
    switch(message) 
    {
        case PSCB_GETVERSION:
            return 0;
	}

	return 0;
}
  Tato varianta se použije, i když funkci PropSheetCallback neuvedeme.

Každá stránka může mít vlastní obslužnou funkci, která zpracovává zejména zprávy WM_INITDIALOG a WM_COMMAND (také může mít více stránek stejnou obslužnou funkci). Tato funkce může být dosti mnimalistická:

int CALLBACK Page3DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_INITDIALOG:
            CreateRpCommandBar(hDlg);
            return TRUE;

        case WM_COMMAND:
            if(LOWORD(wParam) == IDC_BUTTONP1)
            {
                PropSheet_SetCurSel(GetParent(hDlg), NULL, 0);
                return TRUE;
            }
            break;
			
        default:
            break;
    }

    return FALSE;
}

Příklad použití vícestránkového dialogu si můžete stáhnout (ZIP) zde. Jednoduchou aplikaci na házení kostkami, která využívá právě ProperySheet si získáte tady.

Závěr

Pro řadu jednoduchých programů je velmi pohodlné využít právě aplikace založené na dialogu. Ukázali jsme si, že prostředky, které můžeme použít v dialozích mohou být velmi různorodé, a že programátor zvyklý na styl přepínání formulářů PalmOS může toto chování realizovat i v aplikaci pro PocketPC právě pomocí aplikací založených na dialozích.

Doufám, že jste se při čtení článků bavili a že jsem alespoň některé z vás inspiroval, abyste vyzkoušeli programování PocketPC.

Témata: MEMS
  • Nejčtenější

V květnu se zřejmě vrátí ikonická Nokia 3210, kdysi to byl přelomový model

24. března 2024  8:01

Současný vlastník značky Nokia na poli mobilních telefonů, firma HMD (Human Mobile Devices –...

Banka spustila mobilní datové balíčky. Funguje to i zákazníkům z Česka

26. března 2024  12:06

Virtuální banka Revolut spouští virtuálního celosvětového operátora. Zákazníci si mohou kupovat...

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

Z bídného začátku roku se radují. Vypadá to na velký návrat

21. března 2024  7:02

Zřejmě to vypadá na velký návrat. Huawei začíná drtit své domácí konkurenty, přitom jeho produkty...

Trvalo to. Nový nejlepší fotomobil světa konečně koupíte i v Česku

26. března 2024  7:02

Konečně nastává situace, že nejlepší fotomobil v žebříčku DxO Mark je dostupný i na našem trhu....

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

Pochlubili se, že se pochlubí. Značky ze sebe dělají slibotechny

25. března 2024  7:02

Jedním z trochu nečekaných trendů veletrhu MWC v Barceloně se stala oznámení o tom, že firmy nějaké...

U foťáků se blýská na lepší časy, naznačuje výsledek testu nového xiaomi

28. března 2024  7:02

Čínská značka Xiaomi trochu na poli fotomobilů v uplynulých letech tápala. Ukazuje to mimo jiné...

Kartónek Steva Jobse se vydražil za neuvěřitelnou sumu

28. března 2024

Vizitku slavného ředitele společnosti Apple si někdo pořídil za pořádný balík peněz. Přidanou...

Smartphonům od Googlu raketově rostou prodeje tam, kde kraluje Apple

27. března 2024  7:02

Prodeje smartphonů Pixel od Googlu se mohou pochlubit neskutečným nárůstem prodejů. Tedy prozatím...

Podívejte se na chloubu Ostravy z pohledu, který se vám běžně nenaskytne

27. března 2024

Operátor O2 informoval, že ve spolupráci se společností Cetin dokončil modernizaci své mobilní sítě...

FOR KIDS by měl být zážitkem pro celou rodinu, říká Monika
FOR KIDS by měl být zážitkem pro celou rodinu, říká Monika

Monika Pavlíčková (35 let) je maminkou dvou dcer, sedmileté Terezy a čtyřleté Laury, a zároveň také manažerkou obchodního týmu společnosti ABF,...

Rána pro britskou monarchii. Princezna Kate má rakovinu, chodí na chemoterapii

Britská princezna z Walesu Kate (42) se léčí s rakovinou. Oznámila to sama ve videu na sociálních sítích poté, co se...

Smoljak nechtěl Sobotu v Jáchymovi. Zničil jsi nám film, řekl mu

Příběh naivního vesnického mladíka Františka, který získá v Praze díky kondiciogramu nejen pracovní místo, ale i...

Rejžo, jdu do naha! Balzerová vzpomínala na nahou scénu v Zlatých úhořích

Eliška Balzerová (74) v 7 pádech Honzy Dědka přiznala, že dodnes neví, ve který den se narodila. Kromě toho, že...

Kam pro filmy bez Ulož.to? Přinášíme další várku streamovacích služeb do TV

S vhodnou aplikací na vás mohou v televizoru na stisk tlačítka čekat tisíce filmů, seriálů nebo divadelních...

Stále víc hráčů dobrovolně opouští Survivor. Je znamením doby zhýčkanost?

Letošní ročník reality show Survivor je zatím nejkritizovanějším v celé historii soutěže. Může za to fakt, že už...