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


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

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.





Nejčtenější

Fotografické čipy Samsung ISOCELL
Už nebudou vykukovat. Samsung představil mobilní foťáky Isocell

Špičkové chytré telefony mnohým nahradí digitální kompakt. Z fotografických čipů pro smartphony se tak stává zajímavý segment a Samsung patří i v tomto směru...  celý článek

ZTE Axon M
Výjimečný rozevírací smartphone je tu, ale konstrukce je zvláštní

Na rozkládací smartphony s ohebnými displeji se čeká už nějaký ten pátek. Nové ZTE Axon M sice přináší rozevírací koncepci, ovšem ohebný displej nemá. To...  celý článek

Fidget spinner mobil pořídíte za asi 350 korun.
Hit letošního roku už můžete mít i jako mobil. Stojí několik stovek

Hračka původně určená k relaxaci, fidget spinner, je hitem letošního roku. Její slávy využil výrobce z Hongkongu, který do ní vtěsnal celý funkční mobil....  celý článek

Ilustrační snímek
Geniální iPhonová finta. Odvezl si telefony za milion a čtvrt

Neobvyklou krádež řeší od 14. září newyorská policie. Pátrá po identitě muže, který si ze značkové prodejny Applu odvezl tři krabice plné iPhonů. Vydal mu je...  celý článek

Funkční 18palcový OLED displej lze nyní srolovat do 3cm ruličky.
Za tři roky budou mít iPhony ohebný displej. Samsung ostrouhá

iPhone se podle zákulisních informací dohodl s LG na vývoji ohebného displeje pro budoucí iPhony. Samsung tak přijde o lukrativní byznys.  celý článek

Další z rubriky

Netradiční fotoaplikace Gudak vás donutí nad fotkami zase přemýšlet
Za 23 korun vám aplikace fotku z iPhonu ukáže až za tři dny

Vnímání fotografie se za posledních pár let výrazně změnilo. Díky záznamovým médiím již totiž nemusíme přemýšlet nad každým snímkem jako kdysi. Doby, kdy se...  celý článek

Škodlivý kód Cooligan napadá zařízení s Androidem 4 a 5
Aplikace ukazovala otravující čísla. Data kradl antivir přímo z mobilů

Zajímavý model vymyslelo studio DU. Jedna jejich android aplikace ukazovala, kdo volá, včetně obtěžujících čísel telemarketingu. Druhá aplikace, oficiálně...  celý článek

Ilustrační snímek
S těmito aplikacemi se o dovolené neztratíte. Najdou let i levný hotel

Místo slovníku, mapy a průvodce už řada lidí vyráží na dovolenou na neznámé místo jen se svým telefonem. V mnoha situacích je totiž neocenitelným pomocníkem....  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.