[ Pobierz całość w formacie PDF ]
opisujÄ…cym funkcje Win32 API.
Rysowanie tekstu z użyciem funkcji jest nieco wolniejsze, niż w przy-
padku użycia metody . Jeśli zależy Ci na czasie wykonania programu,
powinieneś odwoływać się raczej do metody ; co prawda będziesz musiał
zaprogramować nieco więcej operacji samodzielnie, jednak z punktu widzenia opty-
malizacji algorytmu rozwiązanie takie powinno być korzystniejsze. W większości typo-
wych przypadków różnice czasowe pomiędzy obiema funkcjami są do pominięcia.
Rozdział 13. f& Programowanie operacji graficznych505
Funkcja jest bez wÄ…tpienia narz¹dziem uniwersalnym, a tym samym bar-
dzo użytecznym, toteż prawdopodobnie b¹dziesz jÄ… cz¹sto wykorzystywaÅ‚ w swoich
programach.
Rysowanie map bitowych
Temat wyglÄ…da groznie, ale na szcz¹Å›cie jak miaÅ‚eÅ› już okazj¹ kilkakrotnie si¹ prze-
konać rysowanie map bitowych nie jest wcale zadaniem trudnym. Klasa
oferuje Ci szereg zwiÄ…zanych z tym zagadnieniem funkcji, z których najcz¹Å›ciej uży-
wanÄ… jest metoda . Jej dziaÅ‚anie sprowadza si¹ do umieszczenia zawartoÅ›ci mapy
bitowej (reprezentowanej przez obiekt klasy , pochodnej od ) w zada-
nym miejscu płótna. Na poprzednich stronach widziałeś już kilka przykładów tej operacji,
ale jeden wi¹cej nie zaszkodzi:
Cytowane wyżej instrukcje tworzÄ… obiekt klasy , umieszczajÄ… w nim map¹
bitową odczytaną z pliku FOREST.BMP i wyświetla w okienku aplikacji (ściślej
w jego lewym górnym rogu).
O ile metoda używana jest do rysowania map bitowych bez dodatkowych mo-
dyfikacji, użycie metody umożliwia przeskalowanie wyświetlanej mapy
do zadanych wymiarów. JeÅ›li prostokÄ…t definiujÄ…cy obszar docelowy jest wi¹kszy od
oryginalnego rozmiaru mapy, ta ostatnia zostanie powi¹kszona (rozciÄ…gni¹ta); jeÅ›li jest
on mniejszy mapa zostanie pomniejszona tak, by dopasować si¹ do zadanej wiel-
kości obszaru docelowego. Oto przykład:
SkalujÄ…c mapÄ™ bitowÄ… metoda nie zachowuje oryginalnych proporcji.
W razie potrzeby musisz zadbać o to sam.
Kolejną funkcją obsługującą wyświetlanie map bitowych jest , umożliwiają-
ca zdefiniowanie zarówno obszaru docelowego, jak i zródłowego, tj. fragmentu mapy,
który zostanie skopiowany. Pozwala to np. na podział wyświetlanego obrazka na mniejsze
prostokątne fragmenty, czego odzwierciedlenie znajdziemy w poniższym przykładzie:
506 Część III
Przedstawione wyżej instrukcje odczytujÄ… map¹ bitowÄ… z pliku i dzielÄ… jÄ… na podÅ‚użne
pasy, które nast¹pnie zostajÄ… rozmieszczone w losowo wybranych miejscach okienka.
Przykładowy wynik wykonania programu pokazano na rysunku 13.10. Jeśli umieścisz
powyższy blok instrukcji w funkcji obsługi zdarzenia formularza, zauważysz,
że ukÅ‚ad pasków zmienia si¹ każdorazowo po przesÅ‚oni¹ciu okienka pracujÄ…cej apli-
kacji i jego ponownym odsÅ‚oni¹ciu. Wynika to z faktu, że caÅ‚a procedura wykonywana
jest każdorazowo w chwili powstania konieczności ponownego wyrysowania zawar-
tości okienka.
Rysunek 13.10.
Fragmenty mapy
bitowej rozłożone
w przypadkowych
miejscach okienka
za pomocÄ… funkcji
CopyRect()
OstatniÄ… godnÄ… wzmianki metodÄ… rysowania mapy bitowej jest . Metoda
ta umożliwia zdefiniowanie prostokątnego obszaru zródłowego i docelowego kopio-
wanej mapy bitowej oraz wybranie koloru, który b¹dzie traktowany jako przezroczysty.
Co prawda, zawarty w pliku pomocy opis metody zaleca użycie zamiast
niej komponentu typu , jednak w wielu przypadkach okazuje si¹ to przesadÄ…
spełnia swoje zadanie równie dobrze, a jej wykorzystanie jest znacznie
Å‚atwiejsze. O metodzie tej powinieneÅ› pami¹tać zwÅ‚aszcza podczas operowania na
mapach bitowych używajÄ…cych przezroczystego tÅ‚a. W cz¹Å›ci rozdziaÅ‚u, poÅ›wi¹conej
bitmapom typu DIB, przyjrzymy si¹ dokÅ‚adniej funkcjonalnoÅ›ci klasy , pozwa-
lajÄ…cej na stosowanie bitmap przezroczystych.
[ Pobierz całość w formacie PDF ]