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.
Pro začátečníka je často první úspěšně přeložená a fungující aplikace založená na dialogu vstupenkou do světa programování v operačním systému Windows CE.
Obsah minisérie
- Úvod
- Klasické Windows CE dialogy
Overlapped
versusChild
dialogová okna- Ovládání řádky obsahující menu a SIP
- "Nový" vzhled PocketPC dialogů
- Programování HTML dialogů
- Přepínání mezi dialogy ve stylu Palm Pilotů
- Dialogy typu PropertySheet
- Závěr
Všechny aplikace v tomto článku popsané byly naprogramovány v Embedded Visual C++ 3.0 (eVC++) a testovány v emulátoru PocketPC a na zařízení MDA I s operačním systémem PocketPC 2002.
Úvod
Aplikace založené na dialogu jsou tím nejjednodušším typem programů pro počítače založené na operačním systému Windows. Nejjednodušší program založený na dialogu má tři řádky (a můžete si jej stáhnout tady (ZIP):
#include "windows.h" int WINAPI WinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { return MessageBox(GetDesktopWindow(), TEXT("Text"), TEXT("Titulek"), MB_OK); }
Společnou vlastností aplikací, založených na dialogu, je absence hlavního okna aplikace. Ve funkci WinMain
pouze zavoláme dialog, nebo v nejjednodušším případě jenom funkci MessageBox
.
Okno dialogu v takovém případě je přímým potomkem desktopu (obrazovky Today) a přebírá povinnosti hlavního okna aplikace. Veškeré zpracování událostí se děje pouze ve funkci dialogu. Aplikace založená na dialogu (nebo na dialozích) obsahuje minimum zdrojového textu, který přímo nesouvisí s vlastním účelem aplikace.
Aplikace založené na dialozích mají většinou jednoduché uživatelské rozhraní, sestávající ze standardních komponent uživatelského rozhraní Windows CE. Některé komponenty jsou velmi jednoduché a strohé (políčko k zaškrtnutí, tlačítko), jiné jsou velmi komplexní a využitelné v řadě nestandardních situací (komponenta InkX
, zobrazení HTML nebo široce konfigurovatelný prvek ListView
).
Klasické Windows CE dialogy
Hranaté, strohé a funkční; takové jsou dialogy, které využívají základní prvky, které jsou přenositelné na všechny přístroje s Windows CE. Vytvoříme v eVC++ jednoduchý prázdný projekt a vložíme první dialog:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { DialogBox(hInstance, (LPCTSTR)IDD_MAIN, NULL, (DLGPROC)MainDlgProc); return 0; }
Vytvoříme zdrojový kód aplikace: ve funkci WinMain
pouze voláme funkci DialogBox
, které předáme jako parametry ID dialogu a adresu funkce dialogu. Kód funkce dialogu je triviální:
LRESULT CALLBACK MainDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM ) { switch (message) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: if(LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return TRUE; } break; default: break; } return FALSE; }
Zdrojový kód aplikace můžete stáhnout zde. Po spuštění aplikace se zobrazí dialogové okno uprostřed displeje.
Overlapped
versus Child
dialogová okna
Při grafickém návrhu dialogu nesmíme zapomenout nastavit typ okna (Style) dialogu na Overlapped
:
Pokud bychom to neudělali a okno by bylo typu Child
nebo Popup
, zablokovali bychom si obrazovku Today. Při volání funkce DialogBox
jsme totiž uvedli, že námi vytvářený dialog je přímo potomkem desktopu (obrazovky Today). Pokud by tento dialog byl vytvořen jako klasický blokující dialog (Popup
) nebo jako prvek uživatelského rozhraní (Child
), choval by se k obrazovce Today tak, jak se tyto dialogy obvykle ke svým rodičům chovají: dokud bychom s ním pracovali, byl by jeho rodič (obrazovka Today) zablokován.
Pokud však vytvoříme dialog se stylem Overlapped
, bude okno dialogu zaregistrováno operačním systémem PocketPC jako jedna z aplikací a bude možné se bez obtíží přepínat mezi naší aplikací a obrazovkou Today.
Příště si popíšeme, jak doplnit k první aplikaci s dialogem SIP (panel pro vstup textu) tak, abychom mohli do políčka pro vstup textu v našem dialogu také něco zapsat.