V minulém díle jsme si něco řekli o způsobu fungování programu pro Windows, o jeho smyčce zpráv. Nyní bychom měli projít ve stručnosti další část programu. Otevřete si program
Nazdar (File -> Recent Workspaces -> C:\Pokusy\Nazdar\Nazdar) a pokud jej nemáte zobrazený,
tak do panelu editoru otevřete soubor Nazdar.cpp.
Na obrázku v předchozím díle je znázorněna struktura běžného programu. Zatímco
smyčka zpráv složená ze čtyř funkcí na diagramu zabírá tři bloky, zbytek programu je uschován
v jediném bloku nazvaném "Inicializace". Při pohledu do souboru Nazdar.cpp se na první pohled
zdá, že jde o nějaký omyl. Čtyři řádky programu zabírají 75% obrázku a zbytek toho rozsáhlého
programu se musí vtěsnat do jediného bloku?
Pokusíme se to rozmotat... :-)
Při pohledu na toto tělo programu se to již jeví reálné. Po první funkci InitInstance, u které je otestováno úspěšné ukončení, a po funkci LoadAccelerators (připravuje data pro TranslateAcelerators) již objevíme příkazy patřící smyčce zpráv. Tohoto zjednodušení je dosaženo díky zabalení inicializačních příkazů do funkce InitInstance. Jejím úkolem je provést několik akcí:
Každé okno na obrazovce Windows je založeno na nějaké třídě okna. Třída okna definuje proceduru
okna (viz dále) a některé další charakteristiky oken, která se mohou podle této třídy vytvořit.
Zjednodušeně si lze představit, že Windows nejsou schopny vytvořit na obrazovce okno bez toho,
aniž by pro toto okno byla k dispozici šablona (nebo ještě jinak - střih, podle kterého je možné
okno "ušít").
V našem případě je tato funkce zabalena do funkce MyRegisterClass. Parametrem funkce
je struktura typu WNDCLASS. Její jednotlivé položky je možné objevit v Helpu. Povšimněte
si pouze wc.lpfnWndProc určující proceduru okna.
Vrátíme se zpět do funkce InitInstance - sledujte ji v programu.
Po registraci okno vytvoříme voláním funkce CreateWindow. Tato funkce kupodivu nezobrazí
požadované okno na displeji. Jejím úkolem je vytvořit místo v paměti a uložit zde potřebné
informace o okně. Následuje jednoduchý test, jestli funkce CreateWindow opravdu vytvořila
požadované okno a vrátila handle (něco jako ukazatel nebo pořadové číslo).
Úspěšné vytvoření okna nám umožní jeho vykreslení na displeji. Tu část programového okna, o
kterou se starají Windows (např. rám kolem vyhrazené plochy), je možné zobrazit pomocí funkce
ShowWindow.
Druhým úkolem je vykreslit do klientské oblasti okna uživatelské informace jedinečné pro každý programátorský výtvor. To zajišťuje funkce UpdateWindow zasláním zprávy WM_PAINT proceduře okna (bude vysvětleno v příštím dílu).
Po provedení obou vykreslovacích funkcí by mělo být okno programu na displeji a inicializační
část by mohla skončit. V programu pro Windows 95 nebo Windows NT to tak skutečně bývá. Ve
Windows CE nám ale kousek programu nadbývá:
Funkce CommandBar_Show má za úkol zobrazit nabídkový neboli menu pruh patřící tomuto programu. Windows 95 nebo Windows NT dokážou obstarat nabídku už ve funkci RegisterClass nastavením položky wc.lpszMenuName. Windows CE to neumí, takže se o zpracování nabídky musíme postarat sami. Po otestování, zda existuje handle nabídky (nabídka je již vytvořena v paměti), je zavolána funkce pro zobrazení nabídkového pruhu.
Stránka načtena za 0.00252 sekund.