tworzenie aplikacji dla windows. od prostych programów do gier komputerowych scan.pdf

(15630 KB) Pobierz
888056003.001.png
4
Tworzenie aplikacji dla Windows. Od prostych programów do gier komputerowych
Rozdział 6. Obiekty sterujące w oknie ............................................................ 103
6.1. Obiekt klasy BUTTON .................................................................................... 103
6.2. Obsługa grafiki za pomocą obiektów klasy BUTTON ..................................... 109
6.3. Obiekt klasy edycji. Automaty komórkowe ..................................................... 116
6.4. Ćwiczenia ......................................................................................................... 128
Rozdział 7. Menu i plik zasobów ..................................................................... 131
7.1. Dodanie menu do okna ..................................................................................... 131
7.2. Obsługa bitmapy z pliku zasobów .................................................................... 138
7.3. Odczytywanie danych z pliku. Edytor bitmap .................................................. 143
7.4. Kopiarka wielokrotnie redukująca ................................................................... 154
7.5. Ćwiczenia ......................................................................................................... 169
Podsumowanie części I ................................................................................................. 169
Część II Dla średniozaawansowanych ....................................... 171
Rozdział 8. Projektowanie aplikacji wielowątkowych ....................................... 173
8.1. Tworzenie wątków za pomocą funkcji CreateThread ...................................... 173
8.2. Czy praca z wątkami przyspiesza działanie aplikacji?
Sekcja krytyczna i priorytety wątków .............................................................. 178
8.3. Wstrzymywanie pracy i usuwanie wątków ...................................................... 190
8.4. Ćwiczenia ......................................................................................................... 199
Rozdział 9. Definiowanie bibliotek .................................................................. 201
9.1. Biblioteki statyczne .......................................................................................... 201
9.2. Biblioteki dynamiczne — podejście strukturalne ............................................. 207
9.3. Biblioteki dynamiczne — podejście obiektowe ............................................... 220
9.4. Własny temat okna ........................................................................................... 225
9.5. Ćwiczenia ......................................................................................................... 254
Rozdział 10. Multimedia .................................................................................. 255
10.1. Odtwarzanie plików wav — funkcja sndPlaySound ........................................ 255
10.2. Odtwarzanie plików mp3 — biblioteka FMOD ............................................... 258
10.3. Ćwiczenia ......................................................................................................... 269
Podsumowanie części II ............................................................................................... 270
Część III Dla zaawansowanych .................................................. 273
Rozdział 11. Programowanie gier z użyciem biblioteki OpenGL .......................... 275
11.1. Podstawy obsługi biblioteki OpenGL .............................................................. 275
11.2. Prymitywy OpenGL ......................................................................................... 284
11.3. Bufor głębokości, perspektywa
— wzorzec kodu do programowania gier (pierwsze starcie) ............................ 298
11.4. Animacja .......................................................................................................... 309
11.5. Poruszanie się po scenie, funkcja gluLookAt
i wzorzec kodu do programowania gier (starcie drugie, decydujące) ............... 320
11.6. Tekstury i mipmapy ......................................................................................... 334
11.7. Listy wyświetlania i optymalizacja kodu ......................................................... 349
11.8. Detekcja kolizji ................................................................................................ 361
11.9. Światło, mgła, przezroczystość i inne efekty specjalne ....................................... 368
Uruchamianie gry w trybie pełnoekranowym .................................................. 368
Mgła ................................................................................................................. 371
Przezroczystość ................................................................................................ 374
Światło ............................................................................................................. 384
Spis treści
5
11.10. Jak ustawić stałą prędkość działania programu? .............................................. 390
11.11. Gotowe obiekty OpenGL ................................................................................. 398
11.12. Fonty ................................................................................................................ 406
11.13. Dźwięk na scenie ............................................................................................. 416
11.14. Budujemy grę! ................................................................................................. 419
Wprowadzenie i charakter gry ......................................................................... 419
Dane gracza ...................................................................................................... 420
Strzał z broni .................................................................................................... 423
Pozostali bohaterowie gry ................................................................................ 425
Odnawianie zasobów gracza ............................................................................ 428
Zakończenie programu (gry) ............................................................................ 430
Podsumowanie części III .............................................................................................. 433
Dodatki ..................................................................................... 435
Dodatek A ................................................................................... 437
Dodatek B ................................................................................... 439
Skorowidz .................................................................................... 441
Rozdzia 8. Projektowanie aplikacji wielow"tkowych
173
Rozdzia% 8.
Projektowanie aplikacji
wielow)tkowych
8.1. Tworzenie w)tków za pomoc)
funkcji CreateThread
Jeste my przyzwyczajeni do tego, "e w systemie Windows mo"emy pracowa# na wielu
oknach jednocze nie. Jak du"e jest to udogodnienie, nie trzeba nikogo przekonywa#.
T% cech% systemu nazywamy wielozadaniowo ci&. Jej najpo"yteczniejszym zastosowa-
niem jest mo"liwo # ukrycia przed pracodawc& pod stosem otwartych okien jednego
okienka z uruchomion& ulubion& gr&. System Windows pozwala tak"e na co wi%cej —
na wielow&tkowo #, czyli wykonywanie wielu zada( równocze nie w ramach dzia)ania
jednego programu. Oczywi cie, poj%cia pracy równoczesnej nie nale"y traktowa# zbyt
dos)ownie. System dzieli czas pracy procesora i przyznaje po kolei pewn& jego cz% #
w celu obs)ugi kolejnego w&tku. Poniewa" wspomniany proces wykonywany jest bardzo
szybko, powstaje iluzja równoleg)ego dzia)ania w&tków.
W&tek tworzymy za pomoc& funkcji CreateThread o nast%puj&cej sk)adni:
HANDLE CreateThread(LPSECURITY_ATTRIBUTES atrybuty_watku,
DWORD rozmiar_stosu,
LPTHREAD_START_ROUTINE adres_funkcji_watku,
LPVOID parametr,
DWORD flaga_watku,
LPDWORD identyfikator
);
Pierwszy argument atrybuty_watku mia) zastosowanie w systemie Windows NT. Od tego
czasu nie wykorzystuje si% go i mo"emy w jego miejsce wpisa# NULL . Drugi argument
okre la rozmiar stosu w bajtach. Je"eli nie mamy pomys)u dotycz&cego jego wielko ci,
wpiszmy zero, co oznacza zadeklarowanie stosu standardowego rozmiaru. W parametrze
888056003.002.png
174
Cz#$% II Dla $redniozaawansowanych
adres_funkcji_watku powinien znajdowa# si%, zreszt& zgodnie z pomys)owo nadan&
nazw&, adres funkcji, która zawiera kod obs)ugi w&tku. Deklaracja funkcji musi mie#
nast%puj&c& posta#:
DWORD NazwaFunkcji(LPVOID);
Parametr, który mo"emy przekaza# do funkcji w&tku, przekazujemy jako czwarty argu-
ment funkcji CreateThread . Argument flaga_watku okre la chwil% uruchomienia w&tku.
Mo"emy u"y# jednej z dwóch warto ci:
0 — w&tek uruchamiany jest w chwili utworzenia,
CREATE_SUSPENDED — uruchomienie w&tku jest wstrzymane a" do wywo)ania
funkcji ResumeThread .
Ostatni parametr powinien zawiera# wska*nik do zmiennej, w której zostanie umiesz-
czony identyfikator w&tku. Je"eli uruchomienie w&tku powiedzie si%, funkcja Create
Thread zwraca uchwyt utworzonego w&tku, w przeciwnym przypadku zwracana jest
warto # NULL .
Wszystko, co w)a nie przeczytali cie, jest niezwykle ciekawe, ale warto ju" przyst&pi#
do budowania programu. B%dzie to aplikacja z dziedziny helmintologii, czyli nauki
o robakach (niestety, paso"ytniczych). Wyobra*my sobie obszar roboczy naszego okna.
Klikni%cie lewego przycisku myszy powinno wywo)a# nowy w&tek — robaka, którego
pocz&tek niszczycielskiej dzia)alno ci b%dzie si% znajdowa) w miejscu, w jakim aktualnie
znajduje si% kursor myszy. Tworzymy nowy projekt Windows o nazwie Program20.dev .
Spójrzmy na prosty program realizuj&cy wspomniane zadanie (plik Program20_main.cpp ),
a nast%pnie omówi% kluczowe punkty programu.
#include <windows.h>
/* Sta,e rozmiaru obszaru roboczego okna */
const int MaxX = 640;
const int MaxY = 480;
/* Zmienne globalne dla obs,ugi w3tków */
int x, y;
/* Funkcja w3tku */
DWORD Robak(LPVOID param);
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char szClassName[ ] = "WindowsApp";
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;
888056003.003.png
Zgłoś jeśli naruszono regulamin