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

Během letu si chtěl natočit vedle letící letadlo, telefonu mu ovšem vypadl z...
Samsung mu vypadl z letícího letadla a nerozbil se

Může smartphone přežít pád ze 300 metrů, když i náraz z jen půlmetrové výšky mívá často fatální následky? Někdy zjevně ano. Třeba jeden tři roky starý Samsung...  celý článek

Google Pixel 2 od HTC.
Pixel 2 na prvním obrázku. Vypadá to na hodně konzervativní přístroj

Letos se dočkáme druhé generace smartphonů Pixel od Googlu. Základní model některými vlastnostmi možná nepříjemně překvapí. Jinak bude ze staré školy.  celý článek

S7 a S8 úvodní fotka
Takto vypadají vnitřnosti nejlepších samsungů. Je to úhledná práce

Viděli jste někdy „střeva“ telefonu? Během prohlídky servisního centra telefonů značky Samsung v rámci prodejny Alza v Holešovicích jsme měli možnost se...  celý článek

Ilustrační snímek
ČTÚ smetl ze stolu žádosti virtuálů. Roaming je pro ně noční můrou

Již v průběhu května obdržel Český telekomunikační úřad od tří virtuálních operátorů žádosti o povolení účtovat příplatek k roamingu. Virtuálové bez vlastní...  celý článek

Samsung Galaxy Note 8
Samsung vyvíjí snímač otisků integrovaný v displeji. Bude pětkrát dražší

Smartphone Galaxy Note 8 ještě ani nevyšel a analytik Ming-Chi Kuo už ve svých předpovědích mluví o jeho nástupci. Právě u Notu 9 by měl debutovat v displeji...  celý článek

Další z rubriky

Ilustrační snímek
Facebook a Snapchat jsou zabijáci výkonu smartphonů s Androidem

Je jednou z nejčastěji instalovaných mobilních aplikací, současně však i jednou z těch, které nejvýrazněji ovlivňují výkon androidích smartphonů. Na rychlosti...  celý článek

Aplikace Facebook Messenger Lite je dostupná i v Česku
Šetří místo i data. Dietní Messenger od Facebooku je i v Česku

Facebook Messenger je jedním z nejpoužívanějších kecálků, ale ne všechny telefony si s ním poradí. Loni se tak zrodila myšlenka na odlehčenou verzi určenou pro...  celý článek

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

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.