Microsoft Visual
C++ 2008. Praktyczne
przyk³ady
Autor: Mariusz Owczarek
ISBN: 978-83-246-2587-1
Format: 158×235, stron: 360
• Poznaj w praktyce œrodowisko Visual C++ 2008
• Dowiedz siê, jak korzystaæ z gotowych komponentów programistycznych
• Naucz siê pisaæ w C++ aplikacje przeznaczone dla systemu Windows
Wiele osób s³ysza³o o jêzyku C++, lecz ogromna wiêkszoœæ z nich na sam¹ myœl
o bli¿szym poznaniu go reaguje z podobn¹ rezerw¹, jak na pomys³ wybrania siê na
wakacyjny kurs jêzyka mandaryñskiego. Osoby te pope³niaj¹ jednak niewybaczalny
b³¹d i skutecznie odcinaj¹ siê od niezwykle interesuj¹cego œwiata nowoczesnego
programowania. Na ludzi biegle znaj¹cych C++ czeka bardzo wiele atrakcyjnych ofert
pracy, a niemalej¹ca popularnoœæ systemów Windows sprawia, ¿e najbardziej poszukiwani
w tej grupie s¹ specjaliœci znaj¹cy Visual C++, czyli wygodne w u¿yciu i bardzo
rozbudowane œrodowisko programistyczne firmy Microsoft. Nie trzeba chyba dodawaæ,
¿e zarabiaj¹ oni zwykle znacznie wiêcej ni¿ najlepsi nawet t³umacze z jêzyka
mandaryñskiego…
Jeœli chcesz do³¹czyæ do tej programistycznej elity, ju¿ dziœ siêgnij po odpowiednie
Ÿród³o wiedzy. Ksi¹¿ka „Microsoft Visual C++ 2008. Praktyczne przyk³ady” umo¿liwi
Ci g³adkie rozpoczêcie przygody z Visual C++, prezentuj¹c podstawowe informacje na
temat jêzyka, opisuj¹c œrodowisko programistyczne, sposób tworzenia aplikacji oraz
technikê zarz¹dzania danymi i korzystania z plików. Nauczysz siê z niej równie¿
w³aœciwego stosowania elementów kontrolnych i komponentów programistycznych.
Poznasz metody przetwarzania wielow¹tkowego, zagadnienia zwi¹zane z grafik¹
i ³¹czeniem siê z sieci¹, a ponadto dowiesz siê, jak skonstruowany jest kod programu.
Na tym jednak nie koniec, bowiem na kilku rozbudowanych i bardzo zró¿nicowanych
przyk³adach poznasz te¿ praktyczne zastosowanie ca³ej tej teorii, a wszystko przy
u¿yciu bezp³atnej wersji œrodowiska programistycznego firmy Microsoft.
• Podstawowe informacje na temat Visual C++ 2008
• Instalacja œrodowiska programistycznego
• Elementy sk³adowe aplikacji i sposoby u¿ywania kontrolek
• Zarz¹dzanie danymi i u¿ywanie plików
• U¿ywanie najwa¿niejszych komponentów programistycznych
• Wykorzystanie elementów graficznych
• Podstawy korzystania z w¹tków
• Korzystanie z komponentów sieciowych
• Opis jêzyka C++ i C++/CLI oraz struktury napisanych w nich programów
• Praktyczne projekty aplikacji opracowanych za pomoc¹ Visual C++ 2008
Nie zwlekaj – ju¿ dziœ wkrocz w magiczny œwiat programowania
z wykorzystaniem Visual C++ 2008!
Spis tre"ci
Co znajdziesz w tej ksi!#ce? ............................................................. 9
Rozdzia$ 1. Podstawy %rodowiska Visual C++ 2008 .......................................... 11
J zyk C++ a .NET Framework ....................................................................................... 11
Opis &rodowiska ............................................................................................................. 12
Pobieranie i instalacja &rodowiska .................................................................................. 12
G'ówne okno VC++ 2008 ............................................................................................... 13
Tworzenie nowej aplikacji w VC++ 2008 ........................................................................ 13
Wygl)d &rodowiska w trybie budowy aplikacji .............................................................. 16
Struktura projektu ........................................................................................................... 17
Klasa okna g'ównego ...................................................................................................... 18
Rozdzia$ 2. Podstawowe elementy aplikacji ...................................................... 21
G'ówne okno .................................................................................................................. 21
Przyciski ......................................................................................................................... 26
Etykiety .......................................................................................................................... 27
Pola tekstowe .................................................................................................................. 29
Wprowadzanie danych do aplikacji za pomoc) pól tekstowych ..................................... 31
Wprowadzanie danych z konwersj) typu ....................................................................... 32
Wy&wietlanie warto&ci zmiennych ................................................................................. 34
Pole tekstowe z mask) formatu danych .......................................................................... 35
Pola wyboru, przyciski opcji, kontenery grupuj)ce ........................................................ 37
Rozdzia$ 3. Menu i paski narz&dzi ..................................................................... 41
Rodzaje menu ................................................................................................................. 41
Komponent MenuStrip ................................................................................................... 41
Menu podr czne ............................................................................................................. 47
Skróty klawiaturowe w menu ......................................................................................... 49
Paski narz dzi ................................................................................................................. 51
Rozdzia$ 4. Tablice, uchwyty i dynamiczne tworzenie obiektów .......................... 55
Tablice ............................................................................................................................ 55
Uchwyty ......................................................................................................................... 59
Dynamiczne tworzenie obiektów — operator gcnew ..................................................... 60
Dynamiczna deklaracja tablic ......................................................................................... 61
4
Microsoft Visual C++ 2008. Praktyczne przyk$ady
Rozdzia$ 5. Komunikacja aplikacji z plikami ...................................................... 63
Pliki jako -ród'o danych ................................................................................................. 63
Wyszukiwanie plików .................................................................................................... 64
Odczyt w'asno&ci plików i folderów .............................................................................. 65
Odczyt danych z plików tekstowych .............................................................................. 66
Zapisywanie tekstu do pliku ........................................................................................... 69
Zapis danych do plików binarnych ................................................................................. 71
Odczyt z plików binarnych ............................................................................................. 72
Rozdzia$ 6. Okna dialogowe ............................................................................. 75
Okno typu MessageBox .................................................................................................. 75
Okno dialogowe otwarcia pliku ...................................................................................... 77
Okno zapisu pliku ........................................................................................................... 79
Okno wyboru koloru ....................................................................................................... 80
Wybór czcionki .............................................................................................................. 81
Rozdzia$ 7. Mo#liwo%ci edycji tekstu w komponencie TextBox .......................... 83
W'a&ciwo&ci pola TextBox ............................................................................................. 83
Kopiowanie i wklejanie tekstu ze schowka .................................................................... 85
Wyszukiwanie znaków w tek&cie ................................................................................... 86
Wstawianie tekstu mi dzy istniej)ce linie ...................................................................... 87
Wprowadzanie danych do aplikacji ................................................................................ 88
Prosta konwersja typów — klasa Convert ...................................................................... 88
Konwersja ze zmian) formatu danych ............................................................................ 89
Konwersja liczby na 'a<cuch znakowy ........................................................................... 92
Rozdzia$ 8. Komponent tabeli DataGridView ...................................................... 95
Podstawowe w'a&ciwo&ci komponentu DataGridView ................................................... 95
Zmiana wygl)du tabeli ................................................................................................... 98
Dopasowanie wymiarów komórek tabeli do wy&wietlanego tekstu .............................. 101
Odczytywanie danych z komórek tabeli ....................................................................... 102
Zmiana liczby komórek podczas dzia'ania aplikacji .................................................... 106
Tabela DataGridView z komórkami ró=nych typów .................................................... 110
Przyciski w komórkach — DataGridViewButtonCell .................................................. 113
Komórki z polami wyboru — DataGridViewCheckBoxCell ....................................... 114
Grafika w tabeli — komórka DataGridViewImageCell ............................................... 116
Komórka z list) rozwijan) — DataGridViewComboBoxCell ...................................... 117
Odno&niki internetowe w komórkach — DataGridViewLinkCell ................................ 119
Rozdzia$ 9. Metody zwi!zane z czasem — komponent Timer ........................... 123
Czas systemowy ........................................................................................................... 123
Komponent Timer ........................................................................................................ 125
Rozdzia$ 10. Grafika w aplikacjach Visual C++ .................................................. 127
Obiekt Graphics — kartka do rysowania ...................................................................... 127
Pióro Pen ...................................................................................................................... 133
P dzle zwyk'e i teksturowane ....................................................................................... 135
Rysowanie pojedynczych punktów — obiekt Bitmap .................................................. 137
Rysowanie trwa'e — od&wie=anie rysunku .................................................................. 138
Rozdzia$ 11. Podstawy aplikacji wielow!tkowych ............................................. 141
W)tki ............................................................................................................................ 141
Komunikacja z komponentami z innych w)tków — przekazywanie parametrów ........ 143
Przekazywanie parametrów do metody w)tku .............................................................. 145
Klasa w)tku — przekazywanie parametrów z kontrol) typu ........................................ 146
Komponent BackgroundWorker ................................................................................... 148
Spis tre%ci
5
Rozdzia$ 12. Po$!czenie aplikacji z sieci! internet ............................................. 153
Komponent WebBrowser ............................................................................................. 153
Przetwarzanie stron WWW — obiekt HtmlDocument ................................................. 156
Protokó' FTP ................................................................................................................ 160
Pobieranie zawarto&ci katalogu z serwera FTP ............................................................. 161
Pobieranie plików przez FTP ........................................................................................ 162
Wysy'anie pliku na serwer FTP .................................................................................... 164
Rozdzia$ 13. Dynamiczne tworzenie okien i komponentów ................................. 167
Wy&wietlanie okien — klasa Form ............................................................................... 167
Komponenty w oknie tworzonym dynamicznie ........................................................... 169
Przesy'anie danych z okien dialogowych ..................................................................... 170
Okno tytu'owe aplikacji ................................................................................................ 171
Obs'uga zdarze< dla komponentów tworzonych dynamicznie ..................................... 172
Aplikacja zabezpieczona has'em .................................................................................. 173
Rozdzia$ 14. Struktura programów C++ i C++/CLI ............................................ 175
Programy korzystaj)ce z konsoli w VC++ 2008 .......................................................... 175
Ogólna posta> programu pisanego w C++ .................................................................... 176
Dyrektywy .................................................................................................................... 177
Dyrektywa #include ............................................................................................. 177
Dyrektywa #define ............................................................................................... 178
Dyrektywa #if — kompilacja warunkowa ........................................................... 178
Typy zmiennych ........................................................................................................... 178
Zmienne typu int .................................................................................................. 178
Zmienne typu float ............................................................................................... 179
Typ double ........................................................................................................... 179
Typ char ............................................................................................................... 179
Modyfikatory typów ............................................................................................ 179
Rzutowanie (konwersja) typów ........................................................................... 179
Typ wyliczeniowy ................................................................................................ 180
Operatory ...................................................................................................................... 180
Zapis danych do plików i odczyt z nich za pomoc) operatorów << i >> ............. 182
Wska-niki ..................................................................................................................... 184
Tablice .......................................................................................................................... 184
Operatory new i delete .................................................................................................. 185
Instrukcje ...................................................................................................................... 186
Instrukcje warunkowe .......................................................................................... 186
Instrukcje iteracji ................................................................................................. 187
Funkcje ......................................................................................................................... 188
Przeci)=anie funkcji ............................................................................................. 189
Niejednoznaczno&> .............................................................................................. 189
Przekazywanie argumentów przez warto&> i adres .............................................. 190
Wska-niki do funkcji ........................................................................................... 191
Funkcja main() ............................................................................................................. 192
Przekazywanie parametrów do funkcji main() ..................................................... 193
Struktury i unie ............................................................................................................. 195
Struktury .............................................................................................................. 195
Klasy ............................................................................................................................. 196
Konstruktory i destruktory ................................................................................... 199
Przeci)=anie konstruktorów ................................................................................. 201
Przeci)=anie operatorów ...................................................................................... 202
Statyczne metody i pola klasy .............................................................................. 203
Wska-nik zwrotny this ......................................................................................... 204
Dziedziczenie ....................................................................................................... 205
6
Microsoft Visual C++ 2008. Praktyczne przyk$ady
W'asne kontrolki dziedzicz)ce po standardowych ....................................................... 208
Przestrzenie nazw ......................................................................................................... 211
Wyj)tki ......................................................................................................................... 212
Aplikacje, aplikacje ...................................................................................................... 215
Rozdzia$ 15. Prosty edytor tekstu .................................................................... 217
Opis .............................................................................................................................. 217
G'ówne okno ................................................................................................................ 217
Budowa interfejsu u=ytkownika ................................................................................... 219
Otwieranie pliku z dysku .............................................................................................. 223
Zapisanie pliku tekstowego .......................................................................................... 226
Obs'uga schowka .......................................................................................................... 227
Cofanie komend (Undo) ...................................................................................... 228
Wyci cie tekstu do umieszczenia w schowku ...................................................... 228
Aby skopiowa> tekst do schowka ........................................................................ 228
Aby wklei> tekst ze schowka ............................................................................... 229
Test ............................................................................................................................... 229
Rozdzia$ 16. Program do rysowania .................................................................. 231
Opis .............................................................................................................................. 231
Budowa interfejsu u=ytkownika ................................................................................... 231
Wczytywanie pliku graficznego z dysku ...................................................................... 233
Wy&wietlanie grafiki w oknie ....................................................................................... 234
Rysowanie w oknie za pomoc) myszy ......................................................................... 236
Zmiana koloru linii ....................................................................................................... 239
Zapis pliku graficznego na dysku ................................................................................. 240
Test ............................................................................................................................... 243
Rozdzia$ 17. Figury Voronoi .............................................................................. 245
Opis .............................................................................................................................. 245
Interfejs u=ytkownika ................................................................................................... 246
Struktura projektu C++/CLI ......................................................................................... 246
Wyznaczanie odleg'o&ci mi dzy punktami ................................................................... 248
Rysowanie figur ........................................................................................................... 248
Obs'uga programu ........................................................................................................ 251
Test ............................................................................................................................... 252
Rozdzia$ 18. Automat komórkowy .................................................................... 253
Opis .............................................................................................................................. 253
Interfejs u=ytkownika ................................................................................................... 254
Inicjalizacja planszy ..................................................................................................... 256
Zaznaczanie pól w siatce .............................................................................................. 257
Krok w trybie Gra w =ycie ............................................................................................ 258
Krok w trybie Seeds ..................................................................................................... 260
Kroki w trybie automatycznym .................................................................................... 261
Obs'uga programu ........................................................................................................ 262
Inne ciekawe uk'ady do Gry w =ycie ............................................................................ 262
Oscylatory ............................................................................................................ 263
Obiekty lataj)ce ................................................................................................... 264
Test ............................................................................................................................... 266
Rozdzia$ 19. Wie#e Hanoi ................................................................................. 267
Opis .............................................................................................................................. 267
Interfejs u=ytkownika ................................................................................................... 268
Deklaracja zmiennych klasy Form1 ............................................................................. 270
Spis tre%ci
7
Obs'uga menu ............................................................................................................... 270
Funkcja rysuj)ca kr)=ki ................................................................................................ 272
Przek'adanie kr)=ków ................................................................................................... 275
Ró=ne ko<cowe metody ................................................................................................ 278
Test ............................................................................................................................... 279
Rozdzia$ 20. Aplikacja bazy danych .................................................................. 281
Opis .............................................................................................................................. 281
Instalacja PostgreSQL .................................................................................................. 281
Wy')czenie us'ugi bazy ................................................................................................ 284
Inicjalizacja bazy .......................................................................................................... 285
Organizacja i typy danych w bazach PostgreSQL ........................................................ 286
J zyk SQL .................................................................................................................... 288
Utworzenie bazy danych .............................................................................................. 288
Interfejs u=ytkownika ................................................................................................... 290
W')czenie sterowników bazy PostgreSQL do projektu ................................................ 291
X)czenie z baz) i odczyt danych ................................................................................... 292
Dodawanie danych do bazy .......................................................................................... 294
Zmiana danych w bazie ................................................................................................ 296
Kasowanie danych ........................................................................................................ 299
Obs'uga bazy ................................................................................................................ 300
Test ............................................................................................................................... 300
Rozdzia$ 21. Aplikacja do nauki s$ówek ............................................................ 303
Opis .............................................................................................................................. 303
Interfejs u=ytkownika ................................................................................................... 303
Deklaracja pól klasy ..................................................................................................... 305
Odczyt danych z pliku tekstowego ............................................................................... 306
Odpytywanie ze s'ówek ................................................................................................ 308
Zapis listy wyrazów do pliku tekstowego ..................................................................... 309
Obs'uga ......................................................................................................................... 310
Test ............................................................................................................................... 310
Rozdzia$ 22. Aplikacja do monitorowania systemu ............................................ 313
Opis .............................................................................................................................. 313
Interfejs u=ytkownika ................................................................................................... 313
Ustawienie parametrów kontrolek performanceCounter .............................................. 314
Odczyt parametrów z kontrolek performanceCounter .................................................. 316
Uruchamianie timera — ikona w pasku zada< ............................................................. 316
Rysowanie wykresów ................................................................................................... 318
Opis .............................................................................................................................. 321
Test .............................................................................................................................. 322
Rozdzia$ 23. Klient FTP .................................................................................... 323
Opis .............................................................................................................................. 323
Interfejs u=ytkownika ................................................................................................... 323
Klasa do obs'ugi FTP ................................................................................................... 324
Pobieranie katalogu ...................................................................................................... 326
Pobieranie plików ......................................................................................................... 328
Wysy'anie plików ......................................................................................................... 329
Poruszanie si po folderach .......................................................................................... 329
Rozbudowa ................................................................................................................... 331
Test ............................................................................................................................... 331
8
Microsoft Visual C++ 2008. Praktyczne przyk$ady
Rozdzia$ 24. Aplikacja do drukowania grafiki .................................................... 333
Opis .............................................................................................................................. 333
Interfejs u=ytkownika ................................................................................................... 333
Otwieranie rysunku ...................................................................................................... 334
Obracanie rysunku ........................................................................................................ 335
Drukowanie .................................................................................................................. 336
Opis dzia'ania ............................................................................................................... 338
Test ............................................................................................................................... 338
Odpowiedzi do testów .................................................................. 341
Skorowidz .................................................................................... 343
Rozdzia 12.
Po%&czenie aplikacji
z sieci& internet
Komponent WebBrowser
Czasami istnieje potrzeba wy&wietlania w oknie aplikacji danych pobranych bezpo-
&rednio ze stron WWW. W VC++ 2008 mamy komponent, który jest w'a&ciwie kom-
pletn) przegl)dark) stron opart) na Internet Explorerze.
Za pomoc) tego komponentu w prosty sposób mo=na wy&wietla> zawarto&> ca'ych stron
WWW w oknie aplikacji. Mo=e by> on u=yty nie tylko do przegl)dania stron w sieci,
ale tak=e do wy&wietlania dokumentów HTML z komputera lokalnego (na przyk'ad
plików pomocy aplikacji). Podstawowe w'a&ciwo&ci komponentu
WebBrowser
przed-
stawia tabela 12.1.
Tabela 12.1. Wybrane w'a(ciwo(ci kontrolki WebBrowser
W$a%ciwo%(
Znaczenie
AllowNavigation
W'a&ciwo&> umo=liwiaj)ca zablokowanie przegl)darki tak, =e nie mo=na przej&>
na inne strony ni= aktualna. Warto&>
false
oznacza zablokowanie.
Url
Adres strony do wy&wietlenia w przegl)darce. Ta w'a&ciwo&> jest typu
Uri^
.
CanGoBack
Warto&>
true
oznacza, =e odwiedzana strona nie jest pierwsz) (istnieje historia).
CanGoForward
Warto&>
true
oznacza, =e u=ytkownik cofa' si w historii odwiedzanych stron
i wy&wietlana strona nie jest ostatni) odwiedzon).
Document
W'a&ciwo&> typu
HtmlDocument
zawieraj)ca aktualnie wy&wietlan) w kontrolce stron .
Mo=e by> u=yta do pobrania danych ze strony.
DocumentText
Zawiera -ród'o HTML strony aktualnie wy&wietlonej w przegl)darce.
DocumentTitle
Tytu' aktualnie wy&wietlanej strony.
Najprostszy sposób wy&wietlenia strony WWW pokazuje przyk'ad.
154
Microsoft Visual C++ 2008. Praktyczne przyk$ady
Przyk$ad 12.1 __________________________________________________
Po naci&ni ciu przycisku wy&wietl w oknie aplikacji stron helion.pl.
Rozwi!zanie
Do okna aplikacji wstaw kontrolk
WebBrowser
(zak'adka okna narz dziowego, ostatnia
kontrolka w dziale Common Controls) oraz przycisk
Button
.
Powi ksz rozmiary okna aplikacji i kontrolki
WebBrowser
tak, aby zwi kszy> komfort
ogl)dania stron.
Do zdarzenia
Click
przycisku przypisz nast puj)c) metod :
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Uri^ adres= gcnew Uri("http://helion.pl");
webBrowser1->Url=adres;
}
Uruchom aplikacj , po naci&ni ciu przycisku w oknie kontrolki pojawi si odpowiednia
strona WWW (rysunek 12.1).
Rysunek 12.1. Wy(wietlanie stron WWW w komponencie WebBrowser
Adres przekazywany do w a-ciwo-ci Url nale2y zawsze poprzedza3 prefiksem. W przy-
padku stron WWW jest to http://.
W podobny sposób mo=na wy&wietli> plik lokalny.
Przyk$ad 12.2 __________________________________________________
Utwórz w katalogu na dysku C: folder Aplikacja, a nast pnie w tym folderze plik
pomoc.html o dowolnej tre&ci.
Rozdzia$ 12. Po$!czenie aplikacji z sieci! internet
155
Wy&wietl w oknie kontrolki
WebBrowser
plik pomoc.html znajduj)cy si w folderze
C:\Aplikacja lub inny plik HTML.
Rozwi!zanie
Zbuduj program identyczny jak w poprzednim przyk'adzie, zmie< jedynie adres doku-
mentu.
Uri^ adres= gcnew Uri("c:\\aplikacja\\pomoc.html");
Program b dzie teraz wy&wietla' plik lokalny.
Klasa kontrolki
WebBrowser
posiada te= wiele metod, które umo=liwiaj) nawigacj po
stronach WWW. Przedstawia je tabela 12.2.
Tabela 12.2. Wybrane metody obiektu WebBrowser
Metoda
Dzia$anie
GoBack()
Przenosi u=ytkownika do poprzedniej strony w historii. Dzia'a
tylko, je=eli w'a&ciwo&>
CanGoBack==true
.
GoForward()
Przenosi do nast pnej strony w historii, je=eli u=ytkownik cofa'
si wcze&niej.
GoHome()
Przenosi do strony domowej. Strona domowa jest t) sam), jaka
zosta'a okre&lona w Internet Explorerze.
GoSearch()
Przenosi do strony domy&lnej wyszukiwarki. Równie= lokalizacja
tej strony jest pobierana z Internet Explorera.
Navigate(System::String adres)
Navigate(Uri adres)
Wy&wietla w kontrolce stron o adresie
adres
.
Stop()
Zatrzymuje wczytywanie aktualnej strony.
Bez problemu mo=na doda> mo=liwo&> przechodzenia do stron wcze&niej odwiedzo-
nych, tak jak w przegl)darce. Chocia= pisanie kolejnej przegl)darki internetowej mija
si w'a&ciwie z celem, to nawigacj mo=na wykorzysta> do opracowania na przyk'ad
plików pomocy czy prezentacji, któr) b dzie mo=na ogl)da> wewn)trz aplikacji.
Przyk$ad 12.3 __________________________________________________
Napisz przegl)dark stron WWW z mo=liwo&ci) poruszania si po historii odwiedzanych
stron.
Rozwi!zanie
Utwórz aplikacj i dodaj do jej okna komponent
WebBrowser
, dwa przyciski i pole tek-
stowe. We w'a&ciwo&ci
Text
pierwszego przycisku wpisz
Wstecz
, a drugiego —
Naprzód
.
W polu tekstowym b dziemy wpisywa> stron do odwiedzenia, jej wczytanie powin-
no nast)pi>, kiedy u=ytkownik naci&nie klawisz Enter. Aby tak si sta'o, trzeba obs'u-
=y> zdarzenie
KeyDown
dla pola tekstowego. Zaznacz pole tekstowe mysz) w widoku
156
Microsoft Visual C++ 2008. Praktyczne przyk$ady
projektowania aplikacji, odnajd- to zdarzenie w panelu zdarze<, a nast pnie kliknij je
dwukrotnie. Utworzy si metoda obs'ugi tego zdarzenia, jednym z parametrów tej
metody b dzie rodzaj naci&ni tego klawisza. Oto kod tej metody, w którym przej&cie
do strony nast puje przy wykryciu naci&ni cia klawisza Enter.
private: System::Void textBox1_KeyDown(System::Object^ sender,
System::Windows::Forms::KeyEventArgs^ e) {
if (e->KeyData==System::Windows::Forms::Keys::Enter)
webBrowser1->Navigate("http://"+textBox1->Text);
}
Teraz wystarczy ju= tylko zaprogramowa> metody przycisków — odpowiednio: cofa-
j)ce lub przenosz)ce do przodu w historii.
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
webBrowser1->GoBack();
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
webBrowser1->GoForward();
}
Po wypróbowaniu zapisz projekt na dysku, poniewa= b dziemy jeszcze z niego korzysta>.
Przetwarzanie stron WWW
— obiekt HtmlDocument
Do lepszego zrozumienia tej cz &ci rozdzia'u konieczna jest znajomo&> podstaw
sk'adni j zyka HTML. Celem u=ycia kontrolki
WebBrowser
nie b dzie raczej napisanie
kolejnej przegl)darki WWW, bo takich jest ju= du=o. Zamiast tego za pomoc) tej
kontrolki mo=na wykonywa> operacje na dokumentach pisanych w j zyku HTML.
[rodowisko .NET Framework zawiera klas
HtmlDocument
, która reprezentuje dokument
tego typu. Za pomoc) tego obiektu uzyskujemy dost p do poszczególnych cz &ci sk'a-
dowych pliku HTML. Te cz &ci sk'adowe s) zawarte w obiektach
HtmlElement
. Obiekt
typu
HtmlDocument
grupuje wi c kilka obiektów
HtmlElement
.
W'a&ciwo&ci obiektu
HtmlDocument
przedstawia tabela 12.3.
Obiekt
HtmlElement
posiada w'a&ciwo&ci ogólne odnosz)ce si do wszystkich rodza-
jów sekcji kodu HTML. Najbardziej interesuj)ce s) zwykle w'a&ciwo&ci szczególne,
odnosz)ce si do konkretnych cz &ci kodu, na przyk'ad znacznik
SRC
w kodzie wstawia-
nia obrazka oznacza &cie=k do pliku graficznego. Dost p do tych szczególnych w'a&ci-
wo&ci uzyskujemy za pomoc) metod
GetAttribute()
lub
SetAttribute()
. Argumentami
tych metod jest znacznik w kodzie, do którego chcemy uzyska> dost p (na przyk'ad
SRC
dla odczytania &cie=ki dost pu do obrazka).
Rozdzia$ 12. Po$!czenie aplikacji z sieci! internet
157
Tabela 12.3. Niektóre w'a(ciwo(ci obiektu HtmlDocument
W$a%ciwo%(
Znaczenie
All
Tabela obiektów
HtmlElement
zawieraj)ca wszystkie cz &ci sk'adowe dokumentu.
Body
Element zawieraj)cy cz &> dokumentu po znaczniku
BODY
.
Cookie
Zawiera wszystkie znaczniki kontekstu (ang. cookies) powi)zane z danym dokumentem.
Encoding
Kodowanie u=ywane przez aktualny dokument.
Forms
Tabela obiektów
HtmlElement
zawieraj)ca wszystkie cz &ci po znacznikach
FORM
.
Images
Obiekty
HtmlElement
reprezentuj)ce cz &ci dokumentu po znacznikach
IMG
(obrazy).
Links
Zbiór odno&ników do innych stron zawartych w aktualnym dokumencie.
Title
Tytu' dokumentu.
Przyk$ad 12.4 __________________________________________________
Wypisz w polu tekstowym &cie=ki do wszystkich plików graficznych na stronie WWW
wy&wietlonej w kontrolce
WebBrowser
.
Rozwi!zanie
Otwórz projekt z przyk'adu 12.3.
Zmniejsz troch obszar kontrolki
WebBrowser
i dodaj do okna aplikacji kolejny przycisk
Button
oraz pole tekstowe
TextBox
; ca'o&> niech wygl)da jak na rysunku 12.2.
Rysunek 12.2. Aplikacja pokazuj8ca obiekty graficzne na stronie
158
Microsoft Visual C++ 2008. Praktyczne przyk$ady
Po naci&ni ciu trzeciego przycisku w polu tekstowym powinny si pojawi> odno&niki
do wszystkich obrazków zawartych na wy&wietlanej stronie WWW. Aby to zrobi>,
skorzystamy z w'a&ciwo&ci
Image
obiektu
HtmlDocument
. W'a&ciwo&>
Image
jest typu
tablicowego, do odczytu jej elementów u=yjemy enumeratora (porównaj przyk'ad 4.2).
Do zdarzenia
Click
przycisku przypisz metod :
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
System::Collections::IEnumerator^ element=
webBrowser1->Document->Images->GetEnumerator();
element->MoveNext();
while ((element->MoveNext())&&(element!=nullptr)) {
textBox2->AppendText(((HtmlElement^)(element->Current))->
GetAttribute("SRC")->ToString());
textBox2->AppendText(System::Environment::NewLine);
}
}
Dzia'anie programu dla strony helion.pl pokazuje rysunek 12.2.
W 'atwy sposób mo=na te= napisa> program, który b dzie sprawdza', czy dana strona
WWW pos'uguje si jakimi& znacznikami kontekstu. Wykorzystamy do tego odpowied-
ni) w'a&ciwo&> obiektu
HtmlDocument
.
Przyk$ad 12.5 __________________________________________________
Wyposa= przegl)dark w mo=liwo&> podgl)du znaczników kontekstu na danej stronie.
Rozwi!zanie
Utwórz aplikacj identyczn) jak w przyk'adzie 12.4.
Tym razem metoda wywo'ywana przy naci&ni ciu trzeciego przycisku jest nast puj)ca:
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
System::String^ cookie;
cookie=webBrowser1->Document->Cookie;
textBox2->Clear();
if (cookie!=nullptr)
textBox2->AppendText(cookie);
else
textBox2->AppendText("Nie znaleziono znaczników kontekstu!");
}
Przyk$ad 12.6 __________________________________________________
Po naci&ni ciu przycisku wy&wietl w polu tekstowym wszystkie odno&niki znajduj)ce
si na danej stronie.
Rozdzia$ 12. Po$!czenie aplikacji z sieci! internet
159
Rozwi!zanie
Utwórz aplikacj jak w przyk'adzie 12.4.
Po naci&ni ciu trzeciego przycisku odczytamy zawarto&> w'a&ciwo&ci
Links
dla danej
strony. Podobnie jak to by'o we w'a&ciwo&ci
Image
, jest to tablica obiektów
HtmlElement
,
któr) b dziemy odczytywa> za pomoc) enumeratora.
Oto odpowiednia metoda trzeciego przycisku. W'a&ciwo&>
InnerText
obiektu
HtmlElement
pozwala na odczytanie tekstu zwi)zanego z odno&nikiem.
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
System::Collections::IEnumerator^ odnosnik=
webBrowser1->Document->Links->GetEnumerator();
odnosnik->MoveNext();
while ((odnosnik->MoveNext())&&(odnosnik!=nullptr)) {
textBox2->AppendText(((HtmlElement^)(odnosnik->Current))->
InnerText->ToString()+" ");
textBox2->AppendText(((HtmlElement^)(odnosnik->Current))->
GetAttribute("href")->ToString());
textBox2->AppendText(System::Environment::NewLine);
}
}
Rysunek 12.3 pokazuje aplikacj w dzia'aniu.
Rysunek 12.3. Wy(wietlanie odno(ników ze strony WWW
160
Microsoft Visual C++ 2008. Praktyczne przyk$ady
Protokó% FTP
Protokó' FTP s'u=y do przesy'ania plików przez internet. Mo=na go u=y> we wn trzu
aplikacji na przyk'ad do automatycznego pobrania uaktualnienia lub potrzebnych plików
z danymi.
Implementacja FTP w .NET Framework jest na poziomie, który nazwa'bym „pó'ni-
skim”, co oznacza, =e nie trzeba mie> wiedzy o FTP, aby si nim pos'ugiwa>, ale nie
jest to te= kwestia u=ycia jednej metody pobieraj)cej lub wysy'aj)cej pliki. Po')czenia
FTP umo=liwiaj) obiekty dwóch klas:
FtpWebRequest
i
FtpWebResponse
. Pierwszy z nich
reprezentuje zapytanie do serwera FTP, a drugi odpowied- serwera. Do poprawnej pracy
b d) potrzebne dwie w'a&ciwo&ci obiektu
FtpWebRequest
, które przedstawia tabela 12.4.
Tabela 12.4. Wybrane w'a(ciwo(ci obiektu FtpWebRequest
W$a%ciwo%(
Znaczenie
Credentials
Zawiera login i has'o stosowane przy logowaniu do serwera FTP.
Method
Okre&la rodzaj operacji do wykonania na serwerze. Mo=liwe warto&ci to:
WebRequestMethods::Ftp::DownloadFile
— pobranie pliku,
WebRequestMethods::Ftp::UploadFile
— wys'anie pliku,
WebRequestMethods::Ftp::ListDirectoryDetails
— pobranie szczegó'owych
informacji o plikach znajduj)cych si na serwerze.
Oprócz tych w'a&ciwo&ci b dziemy u=ywa> dwóch metod opisanych w tabeli 12.5.
Tabela 12.5. Metody obiektu FtpWebRequest s'u@8ce do pobierania lub wysy'ania danych
Metoda
Dzia$anie
GetResponse()
Zwraca obiekt typu
FtpWebResponse
, z którego mo=emy czyta> dane wysy'ane
przez serwer.
GetRequestStream()
Zwraca strumie<, do którego mo=na pisa> dane, jakie maj) by> wys'ane
na serwer FTP.
Ogólnie zaprogramowanie pobierania danych z FTP wymaga nast puj)cych czynno&ci:
a)
Utworzenie obiektu
FtpWebRequest
— parametrem dla konstruktora obiektu
jest adres serwera; w przypadku pobrania lub wys'ania pliku parametrem
jest pe'na &cie=ka wraz z nazw) pliku.
b)
Zapisanie we w'a&ciwo&ci
Credentials
loginu i has'a do serwera.
c)
Wybranie czynno&ci (wys'anie b)d- pobranie pliku, pobranie zawarto&ci
katalogu) i odpowiednie ustawienie w'a&ciwo&ci
Method
.
d)
Wys'anie zapytania do serwera i pobranie odpowiedzi (czyli obiektu
FtpWebResponse
) za pomoc) metody
GetResponse()
.
e)
Pobranie strumienia odpowiedzi z obiektu
FtpWebResponse
i pobieranie z niego
danych (zawarto&ci pliku lub katalogu).
Rozdzia$ 12. Po$!czenie aplikacji z sieci! internet
161
W przypadku wys'ania pliku na serwer czynno&ci od a) do c) s) takie same, a dalej
mamy:
d)
Otwarcie strumienia do pisania na serwer metod)
GetRequestStream()
obiektu
FtpWebRequest
.
e)
Zapisanie danych (zawarto&ci pliku lokalnego) do tego strumienia.
Pobieranie zawarto"ci katalogu
z serwera FTP
Teraz zobaczmy, jak praca z FTP wygl)da w praktyce.
Przyk$ad 12.7 __________________________________________________
Pobierz zawarto&> podanego katalogu z podanego serwera FTP.
Rozwi!zanie
Do nowego okna aplikacji wstaw dwa pola tekstowe
TextBox
oraz przycisk
Button
.
Aby program dzia'a', dodaj do niego mo=liwo&> korzystania z przestrzeni nazw
System:
:Net
i
System::IO
, które zawieraj) potrzebne klasy.
using namespace System::Net;
using namespace System::IO;
Ustaw w'a&ciwo&>
Multiline
pola tekstowego
textBox2
na
true
i powi ksz je tak, aby
mog'o wy&wietli> kilka linii tekstu.
Metod obs'uguj)c) zdarzenie
Click
napisz jak ni=ej:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Uri^ adres = gcnew Uri("ftp://"+textBox1->Text);
FtpWebRequest^ req =
dynamic_cast<FtpWebRequest^>(WebRequest::Create(adres));
req->Credentials=gcnew
NetworkCredential("anonymous","moja_nazwa@moj_adres.pl");
req->Method=WebRequestMethods::Ftp::ListDirectoryDetails;
FtpWebResponse^ resp;
resp=dynamic_cast<FtpWebResponse^>(req->GetResponse());
Stream^ resp_stream = resp->GetResponseStream();
StreamReader^ reader = gcnew StreamReader(resp_stream);
String^ linia;
textBox2->Clear();
while (!reader->EndOfStream) {
linia=reader->ReadLine();
textBox2->AppendText(linia+System::Environment::NewLine);
}
}
162
Microsoft Visual C++ 2008. Praktyczne przyk$ady
Po uruchomieniu programu wpisz adres dowolnego publicznego serwera FTP i naci&nij
przycisk. W polu tekstowym otrzymasz zawarto&> g'ównego katalogu. Dzia'anie aplika-
cji przedstawia rysunek 12.4. Zapisz aplikacj na dysku.
Rysunek 12.4.
Aplikacja pobieraj8ca
zawarto(A folderu
z serwera FTP
Pobieranie plików przez FTP
Po znalezieniu potrzebnego pliku mo=na go pobra> na dysk. Rozszerzymy aplikacj
o tak) mo=liwo&>.
Przyk$ad 12.8 __________________________________________________
Dodaj do aplikacji z przyk'adu 12.7 mo=liwo&> pobrania pliku.
Rozwi!zanie
Otwórz aplikacj z poprzedniego przyk'adu i umie&> trzeci przycisk
Button
oraz jeszcze
jedno pole tekstowe do wpisywania nazwy pliku do pobrania.
Metoda zdarzenia
Click
dla drugiego przycisku b dzie mia'a posta>:
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
Uri^ adres = gcnew Uri("ftp://"+textBox1->Text+"/"+textBox3->Text);
FtpWebRequest^ req =
dynamic_cast<FtpWebRequest^>(WebRequest::Create(adres));
req->Credentials=gcnew
NetworkCredential("anonymous","moja_nazwa@moj_adres.pl");
req->Method=WebRequestMethods::Ftp::DownloadFile;
FtpWebResponse^ resp=dynamic_cast<FtpWebResponse^>(req->GetResponse());
Stream^ resp_stream = resp->GetResponseStream();
Rozdzia$ 12. Po$!czenie aplikacji z sieci! internet
163
FileStream^ stru_plik =
gcnew FileStream("./"+textBox3->Text,FileMode::Create);
// czytaj plik z serwera i zapisuj do strumienia
int ile_bajtow;
array<Byte> ^ bufor = gcnew array<Byte>(1024);
do {
ile_bajtow=resp_stream->Read(bufor,0,bufor->Length);
stru_plik->Write(bufor,0,ile_bajtow);
} while(ile_bajtow!=0);
stru_plik->Flush();
stru_plik->Close();
resp_stream->Close();
resp->Close();
}
Powy=sza metoda dzia'a przy za'o=eniu, =e pole tekstowe
textBox1
s'u=y do wpisy-
wania adresu FTP,
textBox2
do wy&wietlania zawarto&ci katalogu, a
textBox3
do wpi-
sywania nazwy pliku do pobrania.
Po uruchomieniu aplikacji najpierw nale=y wpisa> adres serwera wraz z folderem,
w którym znajduje si plik, a nast pnie nacisn)> przycisk Katalog. Po wy&wietleniu
listy plików sprawd-, czy plik znajduje si na tej li&cie, a nast pnie wpisz w polu teksto-
wym jego pe'n) nazw i naci&nij przycisk Pobierz plik. Po pobraniu plik b dzie si znaj-
dowa' w folderze roboczym aplikacji. Wygl)d aplikacji przedstawia rysunek 12.5.
Rysunek 12.5.
Aplikacja
do pobierania plików
W przypadku pobierania d u2szych plików metoda pobierania powinna uruchamia3 si>
w osobnym w?tku. W cz>-ci z przyk adami znajduje si> klient korzystaj?cy z oddziel-
nych w?tków.