Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
C++ Builder 6
dla kadego
Autor: Kent Reisdorph
Tumaczenie: Tomasz M. Sadowski
ISBN: 83-7197-859-6
Tytu oryginau: Sams Teach Yourself
Borland C++ Builder 3 in 21 Days
Format: B5, stron: 812
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
C++Builder naley do systemw byskawicznego projektowania aplikacji (ang. RAD Rapid Application Development) i jak sama nazwa wskazuje, przeznaczony jest do
tworzenia programw w jzyku C++. Wykorzystujc to narzdzie, moesz efektywnie
i szybko konstruowa 32-bitowe programy pracujce w trybie graficznym bd
tekstowym pod kontrol systemu Windows.
Ksika ta poprowadzi Ci przez zagadnienia zwizane z programowaniem w systemie
C++ Builder. Poznasz go poczwszy od podstaw, poprzez bibliotek VCL i jej
komponenty, narzdzia systemu i metody programowania wizualnego, a po techniki
programowania grafiki, obsugi baz danych i aplikacji internetowych. Dziki zdobytej
wiedzy bdziesz mg byskawicznie przej od tradycyjnych metod programowania
do projektowania i programowania wizualnego.
Czytajc j:
Nauczysz si programowa w jzyku C++
Poznasz programowanie zorientowane obiektowo
Zapoznasz si z elementami rodowiska systemu C++Builder 6
oraz bibliotek VCL
Zaznajomisz si ze sposobami byskawicznego prototypowania, budowy
i uruchamiania 32-bitowych aplikacji dla Windows 95 i Windows NT
Nauczysz si tworzy atrakcyjny interfejs uytkownika do swoich aplikacji
Zapoznasz si z zaawansowanymi technikami programowania, jak obsuga
wyjtkw i komunikatw, wykorzystanie rejestru czy udostpnianie polece
Poznasz metody programowania grafiki, obsugi baz danych, tworzenia
aplikacji internetowych, wasnych komponentw i bibliotek DLL
Autor ksiki, Kent Reisdorph, kieruje zespoem programistw w firmie TurboPower
Software w Colorado Springs. Wsppracuje on take z firm Borland, biorc udzia
w pracach grupy doradczej o nazwie TeamB jako niezaleny programista i konsultant.
Spis treci
O Autorze ........................................................................................ 13
Podzikowania................................................................................. 15
Witamy! .......................................................................................... 17
Na co zwraca uwag? ......................................................................................................18
Cz I ..........................................................................................19
Rozdzia 1. Pierwsze kroki w systemie C++Builder ............................................. 21
Czym jest C++Builder?.....................................................................................................21
IDE od pierwszego wejrzenia ...........................................................................................22
Ahoj, przygodo! ................................................................................................................25
To samo w wersji tekstowej ..............................................................................................27
Wprowadzenie do C++ .....................................................................................................33
Narodziny jzyka ........................................................................................................34
Zmienne ......................................................................................................................35
Typy danych w C++ ...................................................................................................36
Operatory ....................................................................................................................39
Funkcje........................................................................................................................41
Funkcja main() ............................................................................................................45
Tablice.........................................................................................................................48
Tablice znakowe .........................................................................................................50
Funkcje operujce na acuchach ...............................................................................52
Tablice acuchw ......................................................................................................54
Podsumowanie ..................................................................................................................55
Spis treci
5
Wojny bibliotek...............................................................................................................151
Biblioteka Object Windows Library.........................................................................152
Biblioteka Microsoft Foundation Class Library .......................................................153
Co wiec wybra?.......................................................................................................154
Biblioteka Visual Component Library ............................................................................154
Komponenty..............................................................................................................155
Waciwoci, metody i zdarzenia..............................................................................156
C++Builder a biblioteka VCL .........................................................................................168
VCL dla praktykw C++ ..........................................................................................169
Wszystkie obiekty klas zdefiniowanych w VCL
musz by tworzone dynamicznie..........................................................................170
VCL nie dopuszcza domylnych parametrw funkcji ..............................................170
VCL nie umoliwia dziedziczenia wielokrotnego....................................................171
Implementacja acuchw w bibliotece VCL .................................................................171
Czy to naprawd jest potrzebne? ..............................................................................172
Szablon SmallString..................................................................................................173
Klasa AnsiString .......................................................................................................173
Typ zbiorowy ............................................................................................................177
Nieco wicej o bibliotece VCL .......................................................................................179
Klasy implementujce formularz i aplikacje ............................................................181
Klasy komponentowe................................................................................................181
To jeszcze nie koniec ............................................................................................186
Podsumowanie ................................................................................................................187
Cz II .......................................................................................289
Rozdzia 8. Komponenty biblioteki VCL ............................................................ 291
Nieco przypomnienia ......................................................................................................291
Waciwo Name ...........................................................................................................293
Waniejsze wsplne waciwoci komponentw............................................................295
Waciwo Align i Anchors ....................................................................................295
Waciwo Color .....................................................................................................295
Kursory .....................................................................................................................297
Waciwo Enabled .................................................................................................297
Waciwo Font.......................................................................................................298
Waciwo Hint .......................................................................................................300
Waciwoci ParentColor,ParentCtl3D, ParentFont, BarentBiDiMode
i ParentShowHint ...................................................................................................300
Caption, Text, Lines, Items.......................................................................................301
Waciwo Tag ........................................................................................................301
Inne waciwoci.......................................................................................................301
Podstawowe metody komponentw................................................................................302
Podstawowe zdarzenia obsugiwane przez komponenty ................................................303
Klasa TStrings .................................................................................................................304
Standardowe elementy sterujce systemu Windows.......................................................307
Komponenty edycyjne ..............................................................................................307
Listy ..........................................................................................................................309
Przyciski....................................................................................................................314
Etykiety .....................................................................................................................323
Paski przewijania ......................................................................................................323
Panele........................................................................................................................324
I wiele innych............................................................................................................324
Standardowe okienka dialogowe.....................................................................................325
Metoda Execute()......................................................................................................325
Okienka dialogowe otwarcia i zapisania pliku................................................................326
Okienka dialogowe otwarcia i zapisania pliku graficznego .....................................329
Okienko dialogowe wyboru koloru ..........................................................................330
Spis treci
7
Okienko dialogowe wyboru czcionki .......................................................................330
Okienka dialogowe wyszukiwania i zamiany...........................................................330
Podsumowanie ................................................................................................................331
Spis treci
9
Jak ledzi okna?.......................................................................................................470
Filtrowanie komunikatw .........................................................................................471
Pozostae funkcje programu WinSight .....................................................................472
DOS-owe programy narzdziowe ...................................................................................474
GREP.EXE................................................................................................................474
COFF2OMF.EXE .....................................................................................................475
IMPLIB.EXE ............................................................................................................475
TOUCH.EXE ............................................................................................................476
TDUMP.EXE............................................................................................................476
Konfiguracja menu narzdzi ...........................................................................................478
Okno dialogowe konfiguracji narzdzi.....................................................................478
Konfiguracja rodowiska systemu ..................................................................................480
Karta Preferences ......................................................................................................480
Karta Designer ..........................................................................................................482
Karta Object Inspector ..............................................................................................482
Karta Library.............................................................................................................483
Karta Palette..............................................................................................................483
Karta Environment Variables ...................................................................................484
Karta Type Library ...................................................................................................484
Karta ClassExplorer ..................................................................................................485
Karta CORBA...........................................................................................................485
Karta C++ Builder Direct .........................................................................................485
Karta Internet ............................................................................................................485
Podsumowanie ................................................................................................................486
Cz III ......................................................................................487
Rozdzia 13. Programowanie operacji graficznych ............................................... 489
Grafika minimalnym kosztem.........................................................................................489
Konteksty urzdze i klasa TCanvas ..............................................................................490
Obiekty GDI....................................................................................................................492
Pira, pdzle i czcionki .............................................................................................493
Ograniczanie obszaru rysowania ..............................................................................498
Podstawowe operacje graficzne ......................................................................................499
Rysowanie tekstu ......................................................................................................500
Rysowanie map bitowych .........................................................................................505
Mapy bitowe przechowywane w pamici .......................................................................506
Mapy bitowe typu DIB....................................................................................................511
Podsumowanie ................................................................................................................515
10
Spis treci
11
Korzystanie z zawartoci bibliotek DLL.........................................................................656
adowanie bibliotek DLL do pamici ......................................................................656
Wywoywanie funkcji z bibliotek DLL ....................................................................657
Tworzenie biblioteki DLL...............................................................................................658
Eksportowanie i importowanie funkcji i klas ...........................................................659
Tajemnicze makro DLL_EXP ..................................................................................662
Tworzenie biblioteki DLL za pomoc skadnicy obiektw ......................................663
Generacja pliku biblioteki importowej .....................................................................667
Budowa aplikacji wykorzystujcej bibliotek DLL........................................................667
Doczanie pliku nagwkowego biblioteki do kodu rdowego............................668
Doczanie biblioteki importowej do projektu .........................................................668
Formularze w bibliotekach DLL .....................................................................................669
Wywoywanie formularza z biblioteki przez aplikacje
napisan w systemie C++Builder ...........................................................................669
Wywoywanie formularza MDI z biblioteki dynamicznej .......................................671
Wywoywanie formularza z biblioteki przez aplikacj
utworzon za pomoc innego kompilatora.............................................................673
Umieszczanie zasobw w pliku DLL..............................................................................674
Utworzenie biblioteki zasobw.................................................................................675
Wykorzystywanie biblioteki zasobw ......................................................................676
Rnice pomidzy BPL a DLL .......................................................................................677
Jeszcze troch na temat DLL ....................................................................................677
Czym rni si pakiet od biblioteki DLL?................................................................678
Podsumowanie ................................................................................................................680
12
Dodatki .......................................................................................773
Skorowidz...................................................................................... 775
Rozdzia 13.
Programowanie
operacji graficznych
Programowanie grafiki naley do milszych elementw rzemiosa programistycznego.
Niniejszy rozdzia stanowi wprowadzenie do programowania operacji graficznych
systemie C++Builder. Wiksza cz rozdziau powicona bdzie omwieniu klas
i
. Na pocztek przedstawimy kilka elementarnych metod prezentacji
grafiki w aplikacjach, tworzonych w systemie C++Builder, natomiast w dalszej czci
rozdziau powiemy kilka sw o interfejsie GDI (Graphics Device Interface) i jego
skadnikach. Niejako po drodze zapoznasz si z rnorodnymi metodami wywietlania linii, figur geometrycznych i map bitowych. Ostatni cz rozdziau powicimy
wykorzystaniu map bitowych przechowywanych w pamici.
490
Cz III
definiowana jest poprzez waciwo typu . W fazie projektowania
ustalenie, jaka bitmapa bdzie przez komponent wywietlana, dokonuje si za pomoc
inspektora obiektw, natomiast w trakcie pracy programu mona to zrobi np. tak:
"".
491
jak wyglda kod wykrelajcy w obszarze danego okna czerwone koo o niebieskim
konturze. Najpierw wersja wykorzystujca wywoania Windows API:
!"#
$%&
' !&
' $"())*+*+#
,- ! &.&/**$"+*+*())#
$%&
' !&/0 *
' #
,- !&/0 * #
,
' *(+*(+*(+*(+#
&/0 *
' #
&/0 * #
/0 #
/0
' #
$'* #
Powyszy kod wyglda jeszcze do prosto, ale atwo tutaj zapomnie np. o usuniciu
utworzonych uprzednio obiektw, czego rezultatem bdzie pochanianie zasobw systemowych przez nasz aplikacj. Porwnajmy powyszy fragment z jego VCL-owym
odpowiednikiem:
1'
' !$#
1' !
#
1',
'(+*(+*(+*(+#
Kod ten jest nie tylko czytelniejszy, ale take bardziej odporny na bdy klasa
sama dba o usunicie przydzielonych sobie zasobw, zwalniajc z tego obowizku
programist. Uycie klas biblioteki VCL jest wic nie tylko prostsze, ale i bezpieczniejsze ni wykorzystanie wywoa Windows API.
Klasa , reprezentujca obszar, na ktrym tworzony jest rysunek (inaczej ptno),
posiada sporo waciwoci i metod. Kilka z nich omwimy dokadniej w dalszej czci
rozdziau. Podstawowe waciwoci klasy zestawiono w tabeli 13.1, natomiast
metody w tabeli 13.2.
Tabela 13.1. Podstawowe waciwoci klasy TCanvas
Waciwo
Przeznaczenie
'
$
23
'
4'
492
Cz III
Przeznaczenie
5
' 2
2$
6
,
'
7
317
2
2
$
$ $
& 6
Kopiuje wybrany obszar mapy bitowej na ptno, skalujc jej zawarto tak,
by wypeni ni wybrany obszar docelowy
74,4
74
74/
74$
Obiekty GDI
W skad interfejsu GDI (ang. Graphics Device Interface) systemu Windows wchodzi
cay szereg obiektw kontrolujcych dziaanie kontekstw urzdze. Do najczciej
uywanych obiektw GDI nale pira, pdzle i czcionki; z pozostaych obiektw
warto tu wspomnie o paletach, mapach bitowych i obszarach ograniczajcych. Na
pocztek przyjrzymy si pirom, pdzlom i czcionkom, natomiast w nastpnej kolejnoci omwimy bardziej zoone obiekty.
493
Pira
Piro (ang. pen) definiuje obiekt uywany do krelenia linii, przy czym pod pojciem
linia rozumiemy zarwno odcinek czcy dwa punkty, jak i krawd (fragment
obrysu) figury (prostokta, elipsy, wieloboku itp.). Ustawienia pira moemy kontrolowa, korzystajc z obiektu klasy , dostpnego we waciwoci klasy .
Waciwoci klasy zostay opisane w tabeli 13.3; klasa ta nie posiada adnych
zdarze ani metod godnych wzmianki.
Tabela 13.3. Waciwoci klasy TPen
Waciwo
Przeznaczenie
3
&2
8
Aby sprawdzi dziaanie tych instrukcji, najprociej jest wstawi do formularza przycisk
i wpisa powyszy kod w funkcji obsugi zdarzenia . Kliknicie przycisku spowoduje wykonanie instrukcji, czyli wykrelenie linii w formularzu.
Opisana wyej metoda moe by rwnie uyta dla innych przedstawionych w tym
rozdziale przykadw. Zauwa jednak, e przysonicie okienka formularza i jego
ponowne wywietlenie powoduje usunicie utworzonego rysunku. Dzieje si tak
dlatego, i wykrelony rysunek jest tymczasowy i znika w chwili ponownego wyrysowania okienka formularza. Aby utrwali rysunek, powiniene umieci tworzce
go instrukcje w funkcji obsugi zdarzenia formularza. W takim przypadku
kade danie ponownego wyrysowania formularza bdzie powodowao odtworzenie
rysunku.
494
Cz III
Warto zwrci uwag, e linie kropkowane i przerywane mog by krelone wycznie pirem o szerokoci 1 piksela. Z kolei styl , definiujcy lini niewidoczn,
pozwala na krelenie figur pozbawionych konturw.
Aby zbada waciwoci klasy , moesz umieci w formularzu komponent
i odpowiednio zmodyfikowa jego waciwo . Trik ten pozwala m.in. na atwe
zbadanie efektw zmiany waciwoci .
Pdzle
Pdzel (ang. brush) odpowiada za wypenienie wntrza wykrelonej figury. Kady krelony prostokt, elipsa czy te wielobok bdzie automatycznie wypeniany wzorem
i kolorem zdefiniowanym przez biecy pdzel. Warto tu podkreli, e wypenienie
wcale nie musi by jednolite. Chocia w wielu przypadkach tak wanie jest, odpowiednie zdefiniowanie pdzla umoliwia wypenienie wntrza figury regularnym wzorem
lub map bitow.
Do kontrolowania ustawie biecego pdzla suy waciwo
klasy ,
bdca obiektem klasy
. Podobnie jak w przypadku klasy , z naszego punktu
widzenia interesujce s jedynie waciwoci klasy, wyszczeglnione w tabeli 13.4;
metody i zdarzenia tej klasy nie maj wikszego zastosowania.
Tabela 13.4. Waciwoci klasy TBrush
Waciwo
Przeznaczenie
&2
Waciwo ! przyjmuje domylnie warto " , co oznacza wypenienie jednolitym kolorem. Uycie wypenienia wymaga zmiany waciwoci ! na warto
okrelajc jeden z predefiniowanych wzorw (" , "# , "$,
" i "$, czyli kreskowanie poziome, pionowe i ukone oraz kratkowanie
i kratkowanie ukone). Za pomoc trzech przedstawionych poniej instrukcji mona
wykreli w formularzu koo wypenione wzorem kratkowanym pod ktem 45 stopni.
Wynik wykonania tych instrukcji przedstawia rysunek 13.1.
1'
' !
#
1'
' &2!'
''#
1',
'(+*(+*((+*((+#
495
Rysunek 13.1.
Koo wypenione
wzorem
kratkowanym
kolor, jak to okienka, w ktrym krelona jest wypeniana figura. Aby si o tym przekona, rzu okiem na rysunek 13.1 (zadanie to nieco utrudnia fakt, i rysunek prezentowany jest w tonacji szaroci, jednak uruchomienie programu powinno rozwia
Twoje wtpliwoci). Jeli chcesz jawnie wymusi kolor ta wypenienia, musisz niestety obej funkcj VCL przez bezporednie odwoanie do funkcji graficznych API.
Aby np. wypeni koo niebiesk kratk na biaym tle, powiniene uy nastpujcych
instrukcji:
1'
' !
#
1'
' &2!'
''#
&31'*/ 59%,#
&1'*8
#
1',
'(+*(+*((+*((+#
Rysunek 13.2.
Tym razem
wzr wypenienia
ma biae to
496
Cz III
W niektrych przypadkach konieczne okazuje si uycie wypenienia pustego (przezroczystego), nie przesaniajcego ta, na ktrym krelona jest figura (rysunek 13.4).
W takiej sytuacji musisz ustawi waciwo ! pdzla na ". W ramach ilustracji dodajmy do rysunku, utworzonego w poprzednim przykadzie, jeszcze jedno koo,
umieszczone w rodku pierwszego i wypenione z uyciem stylu ":
1' 8
!#
1'
'
!6"
'::7
#
1'
'
;;#
1',
'(+*(+*((+*((+#
1'
' &2!'#
1' 8
!)#
1',
'<+*<+*<+*<+#
1'
'
#
Rysunek 13.4.
Koo o wypenieniu
przezroczystym
497
Czcionki
Pojcie czcionki (ang. font) jest Ci doskonale znane na kartach tej ksiki pojawiao
si wielokrotnie. Czcionki uywane przez klas nie rni si niczym od czcionek wykorzystywanych na normalnych formularzach, natomiast waciwo % tej
klasy jest identyczna, jak w przypadku innych klas. Zmiana kroju lub parametrw
czcionki uywanej w operacjach graficznych moe wyglda np. tak:
1'-!;
-6,;#
1'&
=!>#
1'&2!1'&2??@'#
1'74/
(+*(+*;36
;#
I to praktycznie wszystko. Wykorzystaniem czcionek zajmiemy si wkrtce, w podrozdziale pt. Rysowanie tekstu.
498
Cz III
Po uruchomieniu programu zawierajcego (w metodzie obsugi odpowiedniego zdarzenia) powyszy kod powiniene ujrze w okienku tylko fragment mapy bitowej.
Wywoanie funkcji &'( tworzy i aktywuje na rysunku prostoktny obszar
ograniczajcy miejsce dostpne dla operacji rysowania obiektw graficznych o wsprzdnych wierzchokw (50, 50) i (200, 200). Co prawda, mapa bitowa jest nadal
wywietlana tam, gdzie poprzednio, jednak w wyniku naoenia na ni obszaru ograniczajcego, zewntrzne jej fragmenty zostaj obcite, a widoczna pozostaje wycznie
cz rodkowa.
Obszar ograniczajcy wcale nie musi mie ksztatu prostokta. Aby uatrakcyjni poprzedni przykad, zastp wywoanie funkcji & &'( wierszem o nastpujcej treci:
$"- $!,
$C+*C+*<+*<+#
499
Rysunek 13.5.
Efekt uycia
eliptycznego obszaru
ograniczajcego
W tym przypadku definiowany obszar bdzie mia ksztat wieloboku, ktrego wierzchoki opisane s przez wsprzdne zawarte w tablicy . Sam obszar tworzony
bdzie na podstawie zawartych w tablicy danych przez funkcj !&'(.
Liczba wierzchokw moe by dowolna, a okrelanie punktu zamykajcego wielobok
jest zbdne (domknicie obrysu dokonywane jest automatycznie). Po uruchomieniu
programu powiniene uzyska efekt zilustrowany na rysunku 13.6.
Rysunek 13.6.
Obszar ograniczajcy
o ksztacie wieloboku
500
Cz III
Rysowanie tekstu
Zagadnienie to wyglda na pozr banalnie, jednak z pisaniem tekstu wie si kilka
trikw i haczykw, ktrych nieznajomo moe powanie skomplikowa ycie programisty. Na szczcie funkcje suce do rysowania tekstu mog Ci znacznie uatwi
t prac.
Po napisaniu zadanego tekstu w punkcie o wsprzdnych (*+, *+), w naszym programiku narysowany zostanie poziomy odcinek, rozpoczynajcy si w tym samym punkcie.
Jak przedstawiono na rysunku 13.7, efektem wykonania przykadu bdzie umieszczenie
poziomej kreski nad wypisanym w okienku tekstem.
Rysunek 13.7.
Tekst utworzony
za pomoc funkcji
TextOut()
501
Metoda '(, podobnie jak & '(, pozwala na tworzenie pojedynczych
wierszy tekstu. Zbyt dugie wiersze nie s automatycznie amane.
Tekst, zawierajcy znaki tabulacji, rysuje si za pomoc funkcji Windows API
"" '(.
To napisu
Jeli rzucisz okiem na rysunek 13.7, przekonasz si, e tekst napisany zosta na tle, ktre
ma kolor taki, jak kolor ta okna. Kolor ta tekstu ustalany jest na podstawie biecych
ustawie pdzla (domylnie specyfikujcych to w kolorze okna). Aby wpyn na kolor
ta dla rysowanych tekstw, naley zmieni kolor zdefiniowany dla pdzla (mona te
uczyni to tekstu przezroczystym).
Aby wykorzysta to przezroczyste, naley posuy si wasnoci ! komponentu
ilustruj to ponisze instrukcje:
7
' &2&2#
&2!1'
' &2#
1'
' &2!'#
1'74/
(+*)*;-
'K6
=2;#
1'
' &2!&2#
502
Cz III
Funkcja DrawText()
Dostpna w zestawie Windows API funkcja $, '( oferuje programicie znacznie
wiksze moliwoci wykrelania tekstu w okienku, anieli omwiona wczeniej metoda
'(. Z niewiadomych przyczyn klasa nie implementuje metody bdcej
odpowiednikiem $, '(, tote aby wykorzysta wszystkie zalety tej ostatniej, musisz
odwoa si bezporednio do API systemu Windows. Nie jest to specjalnie trudne, ale
wie si z kilkoma niedogodnociami, z ktrymi, niestety, trzeba si pogodzi. Zanim
jednak przejdziemy do szczegowego omwienia moliwoci funkcji $, '(,
zaprezentujmy may przykad:
$,7!$(+*(+*((+*G+#
1'
' !8
#
1'$(+*(+*((+*G+#
6741'*; =2L
M2
@
0
674;*
*N*7.&-",-,O7.P,-7,$O7.,-7,$#
503
Rysunek 13.9.
Kilka zastosowa
funkcji DrawText()
Pierwszy parametr funkcji $, '( okrela kontekst urzdzenia, na ktrym zostanie
narysowany tekst. W przypadku obiektu klasy uchwyt odpowiadajcego mu
kontekstu okrela waciwo , tote wanie jej zawarto przekazujemy jako
pierwszy parametr wywoania $, '(. Drugim parametrem jest wywietlany acuch, natomiast liczba wywietlanych znakw okrelana jest przez trzeci parametr
(nadanie mu wartoci 1 powoduje wywietlenie wszystkich znakw acucha). Czwarty
parametr funkcji $, '( jest wskanikiem struktury typu &; przekazywanie tego
parametru przez wskanik jest konieczne, gdy w niektrych przypadkach moe on
zosta zmodyfikowany w wyniku wywoania funkcji.
Istot programu stanowi ostatni parametr funkcji, przeznaczony do przekazywania
znacznikw kontrolujcych sposb rysowania tekstu. W cytowanym wyej przykadzie
uylimy opcji $-.)), $-#& i $-&, nakazujc w ten sposb systemowi narysowanie pojedynczego wiersza tekstu wyrodkowanego w pionie i w poziomie. czna liczba opcji, ktrych mona uywa dla funkcji $, '( wynosi okoo 20;
nie bdziemy omawia ich wszystkich, odsyajc zainteresowanych Czytelnikw do
systemu pomocy Win32 API.
Przytoczony wyej przykad ilustruje najbardziej typowe zastosowanie funkcji $/
, '(, sprowadzajce si do rysownaia odpowiednio wyrodkowanego tekstu. Moliwo taka jest niezwykle przydatna podczas tworzenia komponentw rysowanych przez
waciciela, szczeglnie przy tworzeniu list zwykych, rozwijanych i menu, w ktrych
nader czsto wykorzystywane jest rodkowanie tekstu w jednej lub obu osiach. By
moe wszystko to brzmi w tej chwili do goosownie, ale gdy tylko zaczniesz posugiwa si komponentami rysowanymi przez waciciela, z pewnoci docenisz zalety
funkcji $, '(.
Innym godnym uwagi znacznikiem uywanym przez funkcj $, '( jest $-$)). Jeli wywietlany tekst jest zbyt dugi, by mg si w caoci zmieci w zadanym prostokcie, jego kocwka jest obcinana i zastpowana znakiem wielokropka.
Przykadowo, wykonanie poniszych instrukcji:
!$(+*++*(+*)+#
6741'*;70'=L
';*
*N*7.,-., &&O7.3/Q&7$-"#
504
Cz III
Jeli przewidujesz, e tekst moe nie zmieci si w przeznaczonym dla niego polu,
moesz uy znacznika $-$-)), aby unikn obcicia tekstu w poowie wyrazu.
Kolejnym bardzo uytecznym znacznikiem jest $-)&, ktrego uycie nakazuje
funkcji $, '( okrelenie wielkoci prostoktnego obszaru potrzebnego do wywietlenia caoci tekstu. W przypadku uycia znacznika $-)& wywoanie naszej
funkcji nie spowoduje wywietlenia tekstu, a jedynie modyfikacj wsprzdnych,
przekazanych w czwartym parametrze. Efektem takiego wywoania bdzie modyfikacja pl "
i
struktury typu & przekazywanej jako parametr. Rozwizanie
takie pozwala na narysowanie tekstu z podziaem na wiersze, czego przykad zosta
zademonstrowany poniej. Dziaanie przedstawionych instrukcji sprowadza si do
ustalenia wysokoci pola tekstu (szeroko jest ustalona), wyrysowania prostokta
o wsprzdnych ustalonych przez funkcj $, '( i narysowania tekstu wewntrz
prostokta. A oto i sam kod:
!$(+*)+*)+*(++#
&
&!;50'0'==L
M'=2
'*R2='
=
26
'=;#
6741'*&.'*
*N*7.5$,7O7.8/$$,5J#
1'
' &2!'&
#
1'$@**
*#
1'
' &2!'#
6741'*&.'**N*7.8/$$,5J#
Rysowanie tekstu z uyciem funkcji $, '( jest nieco wolniejsze, ni w przypadku uycia metody '(. Jeli zaley Ci na czasie wykonania programu,
powiniene odwoywa si raczej do metody '(; co prawda bdziesz musia
zaprogramowa nieco wicej operacji samodzielnie, jednak z punktu widzenia optymalizacji algorytmu rozwizanie takie powinno by korzystniejsze. W wikszoci typowych przypadkw rnice czasowe pomidzy obiema funkcjami s do pominicia.
505
Funkcja $, '( jest bez wtpienia narzdziem uniwersalnym, a tym samym bardzo uytecznym, tote prawdopodobnie bdziesz j czsto wykorzystywa w swoich
programach.
Kolejn funkcj obsugujc wywietlanie map bitowych jest !& '(, umoliwiajca zdefiniowanie zarwno obszaru docelowego, jak i rdowego, tj. fragmentu mapy,
ktry zostanie skopiowany. Pozwala to np. na podzia wywietlanego obrazka na mniejsze
prostoktne fragmenty, czego odzwierciedlenie znajdziemy w poniszym przykadzie:
"
'::7
A
!6"
'::7
#
;@2;#
'
'
'!G#
'
&
=!
B'
'#
@
!+#
?'
'#
TT
506
Cz III
F
7$'!$+*
A'
&
=*
8
*
A'
&
=T'
&
=#
4!8
8
#
2!
'
&
=#
7$'!$4*2*4T
8
*2T'
&
=#
1'2$'*
1'*'#
H
#
Ostatni godn wzmianki metod rysowania mapy bitowej jest
!'(. Metoda
ta umoliwia zdefiniowanie prostoktnego obszaru rdowego i docelowego kopiowanej mapy bitowej oraz wybranie koloru, ktry bdzie traktowany jako przezroczysty.
Co prawda, zawarty w pliku pomocy opis metody
!'( zaleca uycie zamiast
niej komponentu typu
) , jednak w wielu przypadkach okazuje si to przesad
!'( spenia swoje zadanie rwnie dobrze, a jej wykorzystanie jest znacznie
atwiejsze. O metodzie tej powiniene pamita zwaszcza podczas operowania na
mapach bitowych uywajcych przezroczystego ta. W czci rozdziau, powiconej
bitmapom typu DIB, przyjrzymy si dokadniej funkcjonalnoci klasy
, pozwalajcej na stosowanie bitmap przezroczystych.