Minulý díl našeho seriálu Programování naruby jsme věnovali uživatelskému rozhraní. Dnes se blíže podíváme na instalaci prostředí a první spuštění programu.
Po úspěšném naprogramování aplikace ji zkusíme přenést na kapesní počítač. Oba dva operační systémy mají z hlediska programátora tolik společných vlastností, že nepůjde o velký problém.
Instalace prostředí
Na webových stránkách společnosti Microsoft jsou v současnosti dostupné dvě verze vývojového prostředí pro platformu Pocket PC 2002 - Embedded Visual Tools 3.0 a 4.0 (.NET). V této kapitole si popíšeme stažení, instalaci a práci se starším z těchto vývojových prostředí, Embedded Visual C++ 3.0. To stáhnete zdarma ze stránek společnosti Microsoft z adresy http://msdn.microsoft.com/mobility/downloads/
Nejprve přejděte do sekce "Products and Updates"
Na stránce zvolte, že si přejete stáhnout "Embedded Visual Tools 3.0"
Klikněte na tlačítko označené "Download", potvrdte smlouvu se společností Microsoft a stáhněte asi 215 MB velký instalační soubor. Vývojové prostředí je možné instalovat do podadresáře ve složce C:\Program Files\Microsoft eMbedded Tools\. Až se vás instalační program zeptá na sériové číslo, zadejte následující:
Pro psaní programů pro operační systém Pocket PC 2002 nebudete potřebovat žádné další soubory, ani programovací jazyk Visual Basic. Později si můžete ze stejné stránky stáhnout i kompilátory pro Windows CE 3.0 a Pocket PC 2000.
Chcete-li psát programy pro nejnovější verzi operačního systému Windows CE - Pocket PC 2003 (.NET), budete potřebovat vývojové prostředí Embedded Visual C++ 4.0, které je možné stáhnout podobným postupem ze stránek společnosti Microsoft.
Nový projekt
Prostředí Embedded Visual C++ 3.0 je stejné, na jaké jste zvyklí například z Visual C++ nebo jiných produktů firmy Microsoft. Vlevo nahoře je pohled na stromovou strukturu projektu, napravo nahoře okno pro editaci zdrojového textu a pod nimi okno pro výpis nalezených souborů, hlášení chyb při překladu a podobně.
Vytvořte nový projekt (WCE PPC 2002 Application), vyberte adresář a zvolte, že chcete vytvořit jednoduchou Windows CE aplikaci (A simple Windows CE application).
Prostředky a pomocné objekty
Při zobrazení ikony aplikace v nabídce programů vybírají Windows CE automaticky ikonu s nejnižším pořadovým číslem. Proto jako první vždy doplňte do projektu ikonu aplikace - nezapomeňte, že musí obsahovat dva obrázky - velký (32 x 32 bodů) pro nabídku programů a malý (16 x 16 bodů) pro uvedení aplikace v malém menu aplikací.
Popis prostředků aplikace, který používá Microsoft Visual C++ 6.0 pro operační systém Windows 98/2000/XP se v některých detailech liší od popisu, který používá prostředí Embedded Visual C++ 3.0. Proto doporučuji doplnit ikony a menu ručně (nesmíme zapomenout stejně pojmenovat identifikátory).
Oba dva pomocné objekty - Storage pro uložení dat a MyRegistryKey pro jednoduchý přístup do registru, můžete beze změny použít ve vaší aplikaci pro PocketPC. Její překlad by měl proběhnout bez chyb - typ TCHAR má nyní velikost dva byte, ale vzhledem ke korektní inicializaci všech textových konstant pomocí makra TEXT je vše v pořádku.
První spuštění a co bylo špatně
Nyní se pokusíme naši aplikaci beze změny přeložit pro počítače s operačním systémem Pocket PC a spustit v emulátoru. Překvapivě se při překladu objeví pouze tři chyby:
C:\My Documents\PocketPC\myprog\list\ppc0\list.cpp(191) : error C2731: 'WinMain' : function cannot be overloaded C:\My Documents\PocketPC\myprog\list\ppc0\list.cpp(187) : see declaration of 'WinMain' C:\My Documents\PocketPC\myprog\list\ppc0\list.cpp(210) : error C2065: 'CS_CLASSDC' : undeclared identifier C:\My Documents\PocketPC\myprog\list\ppc0\list.cpp(226) : error C2065: 'WS_OVERLAPPEDWINDOW' : undeclared identifier
Opravíme hlavičku funkce WinMain - přepíšeme typ argumentu z LPSTR (Windows) na LPTSTR (Windows CE) a podíváme se na druhé dvě chyby.
WNDCLASS wc = { CS_CLASSDC|CS_VREDRAW|CS_HREDRAW, MainWindowProc, 0, 0, g_hInstance, LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_PROGRAM)), LoadCursor(NULL, IDC_ARROW), (HBRUSH)(COLOR_WINDOW + 1), MAKEINTRESOURCE(IDR_MENU), g_szClass }; |
První z nic se týká vytvoření nové třídy okna; konstanta CS_CLASSDC, která nastavuje společný Device context (nastavení pro vykreslování grafiky) pro všechna okna dané třídy, není definována. Když se nad inicializací struktury WNDCLASS zamyslíme, můžeme z ní vypustit všechno, co nebudeme na Pocket PC potřebovat - překreslování okna při horizontálním a vertikálním pohybu, ikonu, kursor myši a menu.
WNDCLASS wc = { 0, MainWindowProc, 0, 0, g_hInstance, NULL, NULL, (HBRUSH)(COLOR_WINDOW + 1), NULL, g_szClass }; |
Druhá změna se týká vytvoření okna. Ani konstanta WM_OVERLAPPEDWINDOW není definována. Prohlédneme-li si tabulku vlastností, které operační systém Windows CE podporuje, vidíme, že jediná kombinace stylů, která pro nás má smysl, je WS_VISIBLE a WS_CLIPCHILDREN.
Styl | Význam |
---|---|
WS_BORDER | Okno je ohraničené (nepoužíváme, protože okna na PocketPC zaujímají celou plochu displeje). |
WS_CAPTION | Okno má nadpis s titulkem. Tuto vlastnost nepoužijeme, protože nadpis okna je v horním proužku na displeji a nevytváříme okno se zvláštním titulkovým pruhem. |
WS_CHILD | Okno je potomkem jiného okna. Tuto vlastnost hlavní okno aplikace nepotřebuje. |
WS_CLIPCHILDREN | Není překreslována oblast pod potomky tohoto okna. |
WS_CLIPSIBLINGS | Pokud se potomci překrývají, není překrývající se oblast vykreslována. |
WS_DLGFRAME | Okno dialogu. |
WS_HSCROLL, WS_VSCROLL | Okno má horizontální nebo vertikální posuvník. |
WS_OVERLAPPED | Okno má titulek a okraj. Obojí by zbytečně zabíralo místo na displeji. |
WS_POPUP | Vyskakovací (Popup) okno. |
WS_SYSMENU | Okno má v titulkovém pruhu systémové menu. |
WS_TABSTOP, WS_GROUP, WS_DISABLED | Pro prvky dialogu - dostupnost pomocí tabulátoru, první prvek dialogu ze skupiny a prvek neinteragující s uživatelem. |
WS_VISIBLE | Okno je po vytvoření zobrazeno. |
hwndMain = CreateWindowEx( 0, g_szClass, szName, WS_VISIBLE|WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); |
Po opravení těchto dvou chyb můžeme aplikaci přeložit a spustit v emulátoru. Už na první pohled vidíme, že výsledek není zcela ideální. Hlavní okno aplikace zabírá celý displej. Pomocí klávesnice můžeme pracovat i s položkami seznamu. Kopie displeje emulátoru jsou na následujících dvou obrázcích:
Podrobné analýze toho, co musíme do naší aplikace doplnit se budeme věnovat v následujících dílech.
|
Zde můžete stáhnout zdrojové texty (ZIP) programu pro Windows 98/2000, přetažené do Embedded Visual C++ 3.0. |