................................................................................................. 109
Rozdział 8.
Grafika tekstowa .........................................................................113
Wskazanie pola wyboru kursorem.................................................................. 113
Wskazanie pola wyboru tabulatorem.............................................................. 116
Wskazanie pola wyboru myszą....................................................................... 121
Pozycjonowanie pola prostokątnego za pomocą myszy................................. 125
Rozdział 9.
Grafika punktowa .........................................................................131
Okno lokalne................................................................................................... 131
Pozycjonowanie obiektu za pomocą myszy ................................................... 137
Kopiowanie wycinków obrazu do pamięci..................................................... 143
Rozdział 10. Argumenty wywołania programu i zmienne środowiskowe ..............151
Rozdział 11. Kompilacja programu złożonego z kilku plików ..............................155
Część II
Przykłady ...................................................................159
Rozdział 12. Program FACT.cpp obliczający silnię N = n!...................................161
Rozdział 13. Program COSI.cpp obliczający wartość cos(x)...............................165
Rozdział 14. Program CITY.cpp do wpisu par miast i ich odległości ...................173
Rozdział 15. Program PIANO.cpp do symulacji organów ....................................187
Rozdział 16. Program ZEGAR.cpp do symulacji 2 zegarów ................................195
Rozdział 17. Program DYNATREE.cpp do tworzenia
binarnego drzewa dynamicznego ...................................................209
Rozdział 18. Program REGRE.cpp kreślący prostą regresji
dla punktów odczytanych z pliku zewnętrznego .............................217
Rozdział 19. Program MOUSEBOX.cpp do przesuwania myszą okien wyboru ......229
Rozdział 20. Program DRAWTHRU.cpp do rysowania myszą kilku linii
oraz do wybrania i podświetlenia jednej z nich...............................243
4
C:\Andrzej\PDF\ABC programowania w C++\!spis tresci.doc
Spis treści
5
Dodatki .......................................................................................257
Dodatek A
Kody ASCII ..................................................................................259
Dodatek B
Kody klawiatury rozszerzonej ........................................................263
C:\Andrzej\PDF\ABC programowania w C++\!spis tresci.doc
5
Rozdział 9.
Okno lokalne
Współrzędne punktu na ekranie można opisywać w układzie bezwzględnym dotyczącym
całego ekranu lub w podoknie (viewport) posiadającym lokalny układ współrzędnych,
tak jak ma to miejsce w programie p9_1.cpp. W programie tym na początku funkcji
uruchamiamy tryb graficzny pracy monitora. Można to uczynić na dwa sposoby:
przez dołączenie (wlinkowanie) sterowników grafiki, tak aby sterowniki te stanowiły
integralną część naszego programu, lub przez pozostawienie tych sterowników poza naszym programem i korzystanie z nich, w sposób automatyczny, w czasie wykonywa-nia programu. W tym drugim przypadku, używane w programie sterowniki grafiki muszą
być obecne na platformie, na której wykonujemy nasz program. Sterowników tych do-
starcza środowisko Borland w pliku Bgi. Uruchomienie trybu graficznego dla tego przypadku realizuje (w naszym programie) funkcja . Druga możliwość (z „wlinkowaniem”, czyli trwałym dołączeniem sterowników grafiki) realizowana jest (w naszym programie) przez funkcję , którą obecnie unieruchamiamy poprzez
objęcie jej symbolami . Ten sposób odwoływania się do sterowników grafiki
pokazany zostanie w drugiej części tego podrozdziału.
W funkcji utworzymy dwa prostokątne podokna poprzez dwukrotne wywołanie
konstruktora klasy . Na liście argumentów tego konstruktora przekazujemy mu parametry , , , , czyli współrzędne wierzchołków: lewego górnego i prawego dolne-
go kreowanego okna. W obu wywołaniach współrzędne te są różne, tak aby uzyskać wzajemne przesunięcie podokien, jak jest to pokazane na rysunku 9.1. Współrzędne wierzchołków podajemy jako liczby względne odniesione do maksymalnych wymiarów, odpowiednio — w kierunku poziomym i pionowym. Te maksymalne wymiary
uzyskujemy z funkcji oraz . Klasa posiada funkcję własną ,
w której za pomocą funkcji bibliotecznej , ustalamy lokalne układy odnie-
sienia dla obiektów klasy : pierwszego, noszącego nazwę i drugiego, wskazy-
wanego przez wskaźnik . Klasa posiada dwie dalsze funkcje własne: (do
kreślenia elipsy) oraz (do wykreślenia prostej). Na rzecz obiektu wywołamy
funkcję , co spowoduje wykreślenie w pierwszym podoknie (viewport) elipsy
C:\Andrzej\PDF\ABC programowania w C++\r09.doc
131
132
Czć I ¨ Wprowadzenie do jzyka C++
usytuowanej centralnie względem tego podokna. Ponieważ jednak przy kreacji tego podokna ostatnim parametrem przekazanym do funkcji była jedynka (z wier-
sza 36.), to części figur geometrycznych (w tym przypadku elipsy) wychodzące poza
obszar podokna zostaną obcięte. Stąd przycięcie elipsy widoczne na rysunku 9.1.
Natomiast na rzecz drugiego okna, wskazywanego przez wskaźnik , zastosujemy funkcję . Ponieważ przy kreacji okna wskazywanego przez wskaźnik ostatnim
parametrem przekazanym funkcji było zero (z wiersza 37.), więc linia pro-
sta zostanie narysowana w całości (bez ograniczenia jej tylko do obszaru podokna).
Oto program p9_1.cpp:
! "#$%$&%'()
* ++, ',('-&.//012345#&//06-)
7 , ',('-&.//0//0-
8 9 :"1;
!9-9;<-) ) =)>
>++???
+@
A;B
!9 $4C4? 8
!9-9;.DE <-) ) =)>
* "#$%$&%'()
7 , ',('--)
8 9 :"1;
!9-9;B;B<-) ) =)>
>++???
@+
1;
!.3'%'2'0'23'23'0%'0%''0;'D)
@1' F8G)
CD)
* $ 9='9()
7 39='9('9='9()
8 1;9'9'9'9'@1'
'0;'D)
>)++??????????
H
! )
++A;B)
1;48''''-4"-'36I%24J'AI6%$')
1;@0",1;'' ''-0"-'J$331A'36I%24J'8)
* 4CD)
7 4$ ')
8 0KCD)
0K3'7'7'K)
) )
>++?????????????????????????????????????????????????
1;..1;9'9'9'9'@1'
'0;'D.
132
C:\Andrzej\PDF\ABC programowania w C++\r09.doc
Rozdział 9. ¨ Grafika punktowa
133
'0;0;'DD'11
!=" H==)
* (" H=()
7 3"@=)%"@()
8 2"@=)0"@()
23"2K3)0%"0K%)
23"23+)0%"0%+)
>++???
1;..CD
! B3'%'2'0'D)
9 ( L136#?M633'0;)
8'8'23'0%)
* 9 '-N N 'N -'1'3'%)
7 =E 9(3$M%?%$O%'&$5%$2?%$O%)
8 034&P)
==('7' )
>++???
1;..$ 9='9(
! 9 ( L136#?M633')
9 23'0%'=@23'(@0%)
>++???
1;..39='9('9='9(
* ! ( L136#?365$'8')
7 )
8 =@23'(@0%'=@23'(@0%)
>



 

 

 

 

 

 

 

 

 

 

 

 

   
 
  Wskaźnik this...
Pomodliłem się do każdego boga jaki istniał bym był w wstanie wkurzyć tę kobietę do granic możliwości.