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 treci
Co znajdziesz w tej ksice? ............................................................. 9
Rozdzia 1. Podstawy rodowiska Visual C++ 2008 .......................................... 11
Jzyk 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
Wygld 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
Wywietlanie wartoci zmiennych ................................................................................. 34
Pole tekstowe z mask formatu danych .......................................................................... 35
Pola wyboru, przyciski opcji, kontenery grupujce ........................................................ 37
Rozdzia 3. Menu i paski narzdzi ..................................................................... 41
Rodzaje menu ................................................................................................................. 41
Komponent MenuStrip ................................................................................................... 41
Menu podrczne ............................................................................................................. 47
Skróty klawiaturowe w menu ......................................................................................... 49
Paski narzdzi ................................................................................................................. 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 przykady
Rozdzia 5. Komunikacja aplikacji z plikami ...................................................... 63
Pliki jako ródo danych ................................................................................................. 63
Wyszukiwanie plików .................................................................................................... 64
Odczyt wasnoci 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. Moliwoci edycji tekstu w komponencie TextBox .......................... 83
Waciwoci pola TextBox ............................................................................................. 83
Kopiowanie i wklejanie tekstu ze schowka .................................................................... 85
Wyszukiwanie znaków w tekcie ................................................................................... 86
Wstawianie tekstu midzy istniejce linie ...................................................................... 87
Wprowadzanie danych do aplikacji ................................................................................ 88
Prosta konwersja typów — klasa Convert ...................................................................... 88
Konwersja ze zmian formatu danych ............................................................................ 89
Konwersja liczby na acuch znakowy ........................................................................... 92
Rozdzia 8. Komponent tabeli DataGridView ...................................................... 95
Podstawowe waciwoci komponentu DataGridView ................................................... 95
Zmiana wygldu tabeli ................................................................................................... 98
Dopasowanie wymiarów komórek tabeli do wywietlanego tekstu .............................. 101
Odczytywanie danych z komórek tabeli ....................................................................... 102
Zmiana liczby komórek podczas dziaania 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
Odnoniki internetowe w komórkach — DataGridViewLinkCell ................................ 119
Rozdzia 9. Metody zwizane 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
Pdzle zwyke i teksturowane ....................................................................................... 135
Rysowanie pojedynczych punktów — obiekt Bitmap .................................................. 137
Rysowanie trwae — odwieanie rysunku .................................................................. 138
Rozdzia 11. Podstawy aplikacji wielowtkowych ............................................. 141
Wtki ............................................................................................................................ 141
Komunikacja z komponentami z innych wtków — przekazywanie parametrów ........ 143
Przekazywanie parametrów do metody wtku .............................................................. 145
Klasa wtku — przekazywanie parametrów z kontrol typu ........................................ 146
Komponent BackgroundWorker ................................................................................... 148
Spis treci
5
Rozdzia 12. Poczenie aplikacji z sieci internet ............................................. 153
Komponent WebBrowser ............................................................................................. 153
Przetwarzanie stron WWW — obiekt HtmlDocument ................................................. 156
Protokó FTP ................................................................................................................ 160
Pobieranie zawartoci katalogu z serwera FTP ............................................................. 161
Pobieranie plików przez FTP ........................................................................................ 162
Wysyanie pliku na serwer FTP .................................................................................... 164
Rozdzia 13. Dynamiczne tworzenie okien i komponentów ................................. 167
Wywietlanie okien — klasa Form ............................................................................... 167
Komponenty w oknie tworzonym dynamicznie ........................................................... 169
Przesyanie danych z okien dialogowych ..................................................................... 170
Okno tytuowe aplikacji ................................................................................................ 171
Obsuga zdarze dla komponentów tworzonych dynamicznie ..................................... 172
Aplikacja zabezpieczona hasem .................................................................................. 173
Rozdzia 14. Struktura programów C++ i C++/CLI ............................................ 175
Programy korzystajce 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
Wskaniki ..................................................................................................................... 184
Tablice .......................................................................................................................... 184
Operatory new i delete .................................................................................................. 185
Instrukcje ...................................................................................................................... 186
Instrukcje warunkowe .......................................................................................... 186
Instrukcje iteracji ................................................................................................. 187
Funkcje ......................................................................................................................... 188
Przecianie funkcji ............................................................................................. 189
Niejednoznaczno .............................................................................................. 189
Przekazywanie argumentów przez warto i adres .............................................. 190
Wskaniki 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
Przecianie konstruktorów ................................................................................. 201
Przecianie operatorów ...................................................................................... 202
Statyczne metody i pola klasy .............................................................................. 203
Wskanik zwrotny this ......................................................................................... 204
Dziedziczenie ....................................................................................................... 205
6
Microsoft Visual C++ 2008. Praktyczne przykady
Wasne kontrolki dziedziczce po standardowych ....................................................... 208
Przestrzenie nazw ......................................................................................................... 211
Wyjtki ......................................................................................................................... 212
Aplikacje, aplikacje ...................................................................................................... 215
Rozdzia 15. Prosty edytor tekstu .................................................................... 217
Opis .............................................................................................................................. 217
Gówne okno ................................................................................................................ 217
Budowa interfejsu uytkownika ................................................................................... 219
Otwieranie pliku z dysku .............................................................................................. 223
Zapisanie pliku tekstowego .......................................................................................... 226
Obsuga schowka .......................................................................................................... 227
Cofanie komend (Undo) ...................................................................................... 228
Wycicie 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 uytkownika ................................................................................... 231
Wczytywanie pliku graficznego z dysku ...................................................................... 233
Wywietlanie 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 uytkownika ................................................................................................... 246
Struktura projektu C++/CLI ......................................................................................... 246
Wyznaczanie odlegoci midzy punktami ................................................................... 248
Rysowanie figur ........................................................................................................... 248
Obsuga programu ........................................................................................................ 251
Test ............................................................................................................................... 252
Rozdzia 18. Automat komórkowy .................................................................... 253
Opis .............................................................................................................................. 253
Interfejs uytkownika ................................................................................................... 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
Obsuga programu ........................................................................................................ 262
Inne ciekawe ukady do Gry w ycie ............................................................................ 262
Oscylatory ............................................................................................................ 263
Obiekty latajce ................................................................................................... 264
Test ............................................................................................................................... 266
Rozdzia 19. Wiee Hanoi ................................................................................. 267
Opis .............................................................................................................................. 267
Interfejs uytkownika ................................................................................................... 268
Deklaracja zmiennych klasy Form1 ............................................................................. 270
Spis treci
7
Obsuga menu ............................................................................................................... 270
Funkcja rysujca krki ................................................................................................ 272
Przekadanie krków ................................................................................................... 275
Róne kocowe metody ................................................................................................ 278
Test ............................................................................................................................... 279
Rozdzia 20. Aplikacja bazy danych .................................................................. 281
Opis .............................................................................................................................. 281
Instalacja PostgreSQL .................................................................................................. 281
Wyczenie usugi bazy ................................................................................................ 284
Inicjalizacja bazy .......................................................................................................... 285
Organizacja i typy danych w bazach PostgreSQL ........................................................ 286
Jzyk SQL .................................................................................................................... 288
Utworzenie bazy danych .............................................................................................. 288
Interfejs uytkownika ................................................................................................... 290
Wczenie sterowników bazy PostgreSQL do projektu ................................................ 291
czenie z baz i odczyt danych ................................................................................... 292
Dodawanie danych do bazy .......................................................................................... 294
Zmiana danych w bazie ................................................................................................ 296
Kasowanie danych ........................................................................................................ 299
Obsuga bazy ................................................................................................................ 300
Test ............................................................................................................................... 300
Rozdzia 21. Aplikacja do nauki sówek ............................................................ 303
Opis .............................................................................................................................. 303
Interfejs uytkownika ................................................................................................... 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
Obsuga ......................................................................................................................... 310
Test ............................................................................................................................... 310
Rozdzia 22. Aplikacja do monitorowania systemu ............................................ 313
Opis .............................................................................................................................. 313
Interfejs uytkownika ................................................................................................... 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 uytkownika ................................................................................................... 323
Klasa do obsugi FTP ................................................................................................... 324
Pobieranie katalogu ...................................................................................................... 326
Pobieranie plików ......................................................................................................... 328
Wysyanie plików ......................................................................................................... 329
Poruszanie si po folderach .......................................................................................... 329
Rozbudowa ................................................................................................................... 331
Test ............................................................................................................................... 331
8
Microsoft Visual C++ 2008. Praktyczne przykady
Rozdzia 24. Aplikacja do drukowania grafiki .................................................... 333
Opis .............................................................................................................................. 333
Interfejs uytkownika ................................................................................................... 333
Otwieranie rysunku ...................................................................................................... 334
Obracanie rysunku ........................................................................................................ 335
Drukowanie .................................................................................................................. 336
Opis dziaania ............................................................................................................... 338
Test ............................................................................................................................... 338
Odpowiedzi do testów .................................................................. 341
Skorowidz .................................................................................... 343
Rozdzia 12.
Poczenie aplikacji
z sieci internet
Komponent WebBrowser
Czasami istnieje potrzeba wywietlania w oknie aplikacji danych pobranych bezpo-
rednio ze stron WWW. W VC++ 2008 mamy komponent, który jest waciwie kom-
pletn przegldark stron opart na Internet Explorerze.
Za pomoc tego komponentu w prosty sposób mona wywietla zawarto caych stron
WWW w oknie aplikacji. Moe by on uyty nie tylko do przegldania stron w sieci,
ale take do wywietlania dokumentów HTML z komputera lokalnego (na przykad
plików pomocy aplikacji). Podstawowe waciwoci komponentu
WebBrowser
przed-
stawia tabela 12.1.
Tabela 12.1.
Wybrane waciwoci kontrolki WebBrowser
Waciwo
Znaczenie
AllowNavigation
Waciwo umoliwiajca zablokowanie przegldarki tak, e nie mona przej
na inne strony ni aktualna. Warto
false
oznacza zablokowanie.
Url
Adres strony do wywietlenia w przegldarce. Ta waciwo jest typu
Uri^
.
CanGoBack
Warto
true
oznacza, e odwiedzana strona nie jest pierwsz (istnieje historia).
CanGoForward
Warto
true
oznacza, e uytkownik cofa si w historii odwiedzanych stron
i wywietlana strona nie jest ostatni odwiedzon.
Document
Waciwo typu
HtmlDocument
zawierajca aktualnie wywietlan w kontrolce stron.
Moe by uyta do pobrania danych ze strony.
DocumentText
Zawiera ródo HTML strony aktualnie wywietlonej w przegldarce.
DocumentTitle
Tytu aktualnie wywietlanej strony.
Najprostszy sposób wywietlenia strony WWW pokazuje przykad.
154
Microsoft Visual C++ 2008. Praktyczne przykady
Przykad 12.1 __________________________________________________
Po naciniciu przycisku wywietl w oknie aplikacji stron helion.pl.
Rozwizanie
Do okna aplikacji wstaw kontrolk
WebBrowser
(zakadka okna narzdziowego, ostatnia
kontrolka w dziale Common Controls) oraz przycisk
Button
.
Powiksz rozmiary okna aplikacji i kontrolki
WebBrowser
tak, aby zwikszy komfort
ogldania stron.
Do zdarzenia
Click
przycisku przypisz nastpujc 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 naciniciu przycisku w oknie kontrolki pojawi si odpowiednia
strona WWW (rysunek 12.1).
Rysunek 12.1.
Wywietlanie stron WWW w komponencie WebBrowser
Adres przekazywany do waciwoci
Url naley zawsze poprzedza prefiksem. W przy-
padku stron WWW jest to http://.
W podobny sposób mona wywietli plik lokalny.
Przykad 12.2 __________________________________________________
Utwórz w katalogu na dysku C: folder Aplikacja, a nastpnie w tym folderze plik
pomoc.html o dowolnej treci.
Rozdzia 12.
i Poczenie aplikacji z sieci internet
155
Wywietl w oknie kontrolki
WebBrowser
plik pomoc.html znajdujcy si w folderze
C:\Aplikacja lub inny plik HTML.
Rozwizanie
Zbuduj program identyczny jak w poprzednim przykadzie, zmie jedynie adres doku-
mentu.
Uri^ adres= gcnew Uri("c:\\aplikacja\\pomoc.html");
Program bdzie teraz wywietla plik lokalny.
Klasa kontrolki
WebBrowser
posiada te wiele metod, które umoliwiaj nawigacj po
stronach WWW. Przedstawia je tabela 12.2.
Tabela 12.2.
Wybrane metody obiektu WebBrowser
Metoda
Dziaanie
GoBack()
Przenosi uytkownika do poprzedniej strony w historii. Dziaa
tylko, jeeli waciwo
CanGoBack==true
.
GoForward()
Przenosi do nastpnej strony w historii, jeeli uytkownik cofa
si wczeniej.
GoHome()
Przenosi do strony domowej. Strona domowa jest t sam, jaka
zostaa okrelona w Internet Explorerze.
GoSearch()
Przenosi do strony domylnej wyszukiwarki. Równie lokalizacja
tej strony jest pobierana z Internet Explorera.
Navigate(System::String adres)
Navigate(Uri adres)
Wywietla w kontrolce stron o adresie
adres
.
Stop()
Zatrzymuje wczytywanie aktualnej strony.
Bez problemu mona doda moliwo przechodzenia do stron wczeniej odwiedzo-
nych, tak jak w przegldarce. Chocia pisanie kolejnej przegldarki internetowej mija
si waciwie z celem, to nawigacj mona wykorzysta do opracowania na przykad
plików pomocy czy prezentacji, któr bdzie mona oglda wewntrz aplikacji.
Przykad 12.3 __________________________________________________
Napisz przegldark stron WWW z moliwoci poruszania si po historii odwiedzanych
stron.
Rozwizanie
Utwórz aplikacj i dodaj do jej okna komponent
WebBrowser
, dwa przyciski i pole tek-
stowe. We waciwoci
Text
pierwszego przycisku wpisz
Wstecz
, a drugiego —
Naprzód
.
W polu tekstowym bdziemy wpisywa stron do odwiedzenia, jej wczytanie powin-
no nastpi, kiedy uytkownik nacinie klawisz Enter. Aby tak si stao, trzeba obsu-
y zdarzenie
KeyDown
dla pola tekstowego. Zaznacz pole tekstowe mysz w widoku
156
Microsoft Visual C++ 2008. Praktyczne przykady
projektowania aplikacji, odnajd to zdarzenie w panelu zdarze, a nastpnie kliknij je
dwukrotnie. Utworzy si metoda obsugi tego zdarzenia, jednym z parametrów tej
metody bdzie rodzaj nacinitego klawisza. Oto kod tej metody, w którym przejcie
do strony nastpuje przy wykryciu nacinicia 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-
jce lub przenoszce 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 bdziemy jeszcze z niego korzysta.
Przetwarzanie stron WWW
— obiekt HtmlDocument
Do lepszego zrozumienia tej czci rozdziau konieczna jest znajomo podstaw
skadni jzyka HTML. Celem uycia kontrolki
WebBrowser
nie bdzie raczej napisanie
kolejnej przegldarki WWW, bo takich jest ju duo. Zamiast tego za pomoc tej
kontrolki mona wykonywa operacje na dokumentach pisanych w jzyku HTML.
rodowisko .NET Framework zawiera klas
HtmlDocument
, która reprezentuje dokument
tego typu. Za pomoc tego obiektu uzyskujemy dostp do poszczególnych czci ska-
dowych pliku HTML. Te czci skadowe s zawarte w obiektach
HtmlElement
. Obiekt
typu
HtmlDocument
grupuje wic kilka obiektów
HtmlElement
.
Waciwoci obiektu
HtmlDocument
przedstawia tabela 12.3.
Obiekt
HtmlElement
posiada waciwoci ogólne odnoszce si do wszystkich rodza-
jów sekcji kodu HTML. Najbardziej interesujce s zwykle waciwoci szczególne,
odnoszce si do konkretnych czci kodu, na przykad znacznik
SRC
w kodzie wstawia-
nia obrazka oznacza ciek do pliku graficznego. Dostp do tych szczególnych waci-
woci uzyskujemy za pomoc metod
GetAttribute()
lub
SetAttribute()
. Argumentami
tych metod jest znacznik w kodzie, do którego chcemy uzyska dostp (na przykad
SRC
dla odczytania cieki dostpu do obrazka).
Rozdzia 12.
i Poczenie aplikacji z sieci internet
157
Tabela 12.3.
Niektóre waciwoci obiektu HtmlDocument
Waciwo
Znaczenie
All
Tabela obiektów
HtmlElement
zawierajca wszystkie czci skadowe dokumentu.
Body
Element zawierajcy cz dokumentu po znaczniku
BODY
.
Cookie
Zawiera wszystkie znaczniki kontekstu (ang. cookies) powizane z danym dokumentem.
Encoding
Kodowanie uywane przez aktualny dokument.
Forms
Tabela obiektów
HtmlElement
zawierajca wszystkie czci po znacznikach
FORM
.
Images
Obiekty
HtmlElement
reprezentujce czci dokumentu po znacznikach
IMG
(obrazy).
Links
Zbiór odnoników do innych stron zawartych w aktualnym dokumencie.
Title
Tytu dokumentu.
Przykad 12.4 __________________________________________________
Wypisz w polu tekstowym cieki do wszystkich plików graficznych na stronie WWW
wywietlonej w kontrolce
WebBrowser
.
Rozwizanie
Otwórz projekt z przykadu 12.3.
Zmniejsz troch obszar kontrolki
WebBrowser
i dodaj do okna aplikacji kolejny przycisk
Button
oraz pole tekstowe
TextBox
; cao niech wyglda jak na rysunku 12.2.
Rysunek 12.2.
Aplikacja pokazujca obiekty graficzne na stronie
158
Microsoft Visual C++ 2008. Praktyczne przykady
Po naciniciu trzeciego przycisku w polu tekstowym powinny si pojawi odnoniki
do wszystkich obrazków zawartych na wywietlanej stronie WWW. Aby to zrobi,
skorzystamy z waciwoci
Image
obiektu
HtmlDocument
. Waciwo
Image
jest typu
tablicowego, do odczytu jej elementów uyjemy enumeratora (porównaj przykad 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);
}
}
Dziaanie programu dla strony helion.pl pokazuje rysunek 12.2.
W atwy sposób mona te napisa program, który bdzie sprawdza, czy dana strona
WWW posuguje si jakimi znacznikami kontekstu. Wykorzystamy do tego odpowied-
ni waciwo obiektu
HtmlDocument
.
Przykad 12.5 __________________________________________________
Wyposa przegldark w moliwo podgldu znaczników kontekstu na danej stronie.
Rozwizanie
Utwórz aplikacj identyczn jak w przykadzie 12.4.
Tym razem metoda wywoywana przy naciniciu trzeciego przycisku jest nastpujca:
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!");
}
Przykad 12.6 __________________________________________________
Po naciniciu przycisku wywietl w polu tekstowym wszystkie odnoniki znajdujce
si na danej stronie.
Rozdzia 12.
i Poczenie aplikacji z sieci internet
159
Rozwizanie
Utwórz aplikacj jak w przykadzie 12.4.
Po naciniciu trzeciego przycisku odczytamy zawarto waciwoci
Links
dla danej
strony. Podobnie jak to byo we waciwoci
Image
, jest to tablica obiektów
HtmlElement
,
któr bdziemy odczytywa za pomoc enumeratora.
Oto odpowiednia metoda trzeciego przycisku. Waciwo
InnerText
obiektu
HtmlElement
pozwala na odczytanie tekstu zwizanego z odnonikiem.
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 dziaaniu.
Rysunek 12.3.
Wywietlanie odnoników ze strony WWW
160
Microsoft Visual C++ 2008. Praktyczne przykady
Protokó FTP
Protokó FTP suy do przesyania plików przez internet. Mona go uy we wntrzu
aplikacji na przykad do automatycznego pobrania uaktualnienia lub potrzebnych plików
z danymi.
Implementacja FTP w .NET Framework jest na poziomie, który nazwabym „póni-
skim”, co oznacza, e nie trzeba mie wiedzy o FTP, aby si nim posugiwa, ale nie
jest to te kwestia uycia jednej metody pobierajcej lub wysyajcej pliki. Poczenia
FTP umoliwiaj obiekty dwóch klas:
FtpWebRequest
i
FtpWebResponse
. Pierwszy z nich
reprezentuje zapytanie do serwera FTP, a drugi odpowied serwera. Do poprawnej pracy
bd potrzebne dwie waciwoci obiektu
FtpWebRequest
, które przedstawia tabela 12.4.
Tabela 12.4.
Wybrane waciwoci obiektu FtpWebRequest
Waciwo
Znaczenie
Credentials
Zawiera login i haso stosowane przy logowaniu do serwera FTP.
Method
Okrela rodzaj operacji do wykonania na serwerze. Moliwe wartoci to:
WebRequestMethods::Ftp::DownloadFile
— pobranie pliku,
WebRequestMethods::Ftp::UploadFile
— wysanie pliku,
WebRequestMethods::Ftp::ListDirectoryDetails
— pobranie szczegóowych
informacji o plikach znajdujcych si na serwerze.
Oprócz tych waciwoci bdziemy uywa dwóch metod opisanych w tabeli 12.5.
Tabela 12.5.
Metody obiektu FtpWebRequest suce do pobierania lub wysyania danych
Metoda
Dziaanie
GetResponse()
Zwraca obiekt typu
FtpWebResponse
, z którego moemy czyta dane wysyane
przez serwer.
GetRequestStream()
Zwraca strumie, do którego mona pisa dane, jakie maj by wysane
na serwer FTP.
Ogólnie zaprogramowanie pobierania danych z FTP wymaga nastpujcych czynnoci:
a)
Utworzenie obiektu
FtpWebRequest
— parametrem dla konstruktora obiektu
jest adres serwera; w przypadku pobrania lub wysania pliku parametrem
jest pena cieka wraz z nazw pliku.
b)
Zapisanie we waciwoci
Credentials
loginu i hasa do serwera.
c)
Wybranie czynnoci (wysanie bd pobranie pliku, pobranie zawartoci
katalogu) i odpowiednie ustawienie waciwoci
Method
.
d)
Wysanie 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 (zawartoci pliku lub katalogu).
Rozdzia 12.
i Poczenie aplikacji z sieci internet
161
W przypadku wysania pliku na serwer czynnoci od a) do c) s takie same, a dalej
mamy:
d)
Otwarcie strumienia do pisania na serwer metod
GetRequestStream()
obiektu
FtpWebRequest
.
e)
Zapisanie danych (zawartoci pliku lokalnego) do tego strumienia.
Pobieranie zawartoci katalogu
z serwera FTP
Teraz zobaczmy, jak praca z FTP wyglda w praktyce.
Przykad 12.7 __________________________________________________
Pobierz zawarto podanego katalogu z podanego serwera FTP.
Rozwizanie
Do nowego okna aplikacji wstaw dwa pola tekstowe
TextBox
oraz przycisk
Button
.
Aby program dziaa, dodaj do niego moliwo korzystania z przestrzeni nazw
System:
´
:Net
i
System::IO
, które zawieraj potrzebne klasy.
using namespace System::Net;
using namespace System::IO;
Ustaw waciwo
Multiline
pola tekstowego
textBox2
na
true
i powiksz je tak, aby
mogo wywietli kilka linii tekstu.
Metod obsugujc zdarzenie
Click
napisz jak niej:
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 przykady
Po uruchomieniu programu wpisz adres dowolnego publicznego serwera FTP i nacinij
przycisk. W polu tekstowym otrzymasz zawarto gównego katalogu. Dziaanie aplika-
cji przedstawia rysunek 12.4. Zapisz aplikacj na dysku.
Rysunek 12.4.
Aplikacja pobierajca
zawarto folderu
z serwera FTP
Pobieranie plików przez FTP
Po znalezieniu potrzebnego pliku mona go pobra na dysk. Rozszerzymy aplikacj
o tak moliwo.
Przykad 12.8 __________________________________________________
Dodaj do aplikacji z przykadu 12.7 moliwo pobrania pliku.
Rozwizanie
Otwórz aplikacj z poprzedniego przykadu i umie trzeci przycisk
Button
oraz jeszcze
jedno pole tekstowe do wpisywania nazwy pliku do pobrania.
Metoda zdarzenia
Click
dla drugiego przycisku bdzie miaa 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.
i Poczenie 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();
}
Powysza metoda dziaa przy zaoeniu, e pole tekstowe
textBox1
suy do wpisy-
wania adresu FTP,
textBox2
do wywietlania zawartoci katalogu, a
textBox3
do wpi-
sywania nazwy pliku do pobrania.
Po uruchomieniu aplikacji najpierw naley wpisa adres serwera wraz z folderem,
w którym znajduje si plik, a nastpnie nacisn przycisk Katalog. Po wywietleniu
listy plików sprawd, czy plik znajduje si na tej licie, a nastpnie wpisz w polu teksto-
wym jego pen nazw i nacinij przycisk Pobierz plik. Po pobraniu plik bdzie si znaj-
dowa w folderze roboczym aplikacji. Wygld aplikacji przedstawia rysunek 12.5.
Rysunek 12.5.
Aplikacja
do pobierania plików
W przypadku pobierania duszych plików metoda pobierania powinna uruchamia si
w osobnym wtku. W czci z przykadami znajduje si klient korzystajcy z oddziel-
nych wtków.
164
Microsoft Visual C++ 2008. Praktyczne przykady
Wysyanie pliku na serwer FTP
Czas na zaprogramowanie moliwoci przesyania pliku na serwer.
Przykad 12.9 __________________________________________________
Docz do aplikacji z poprzedniego przykadu moliwo przesyania plików z dysku
lokalnego na serwer.
Rozwizanie
Otwórz aplikacj z poprzedniego przykadu i umie trzeci przycisk
Button
oraz kom-
ponent systemowego okna otwarcia pliku
OpenFileDialog
. We waciwoci
Text
trze-
ciego przycisku wpisz
Wylij plik
.
Po naciniciu przycisku powinno si pojawi standardowe okno wyboru pliku, w którym
bdzie mona wskaza plik do wysania.
Wysyanie pliku zrealizujemy w metodzie obsugujcej zdarzenie
Click
przycisku.
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
if (openFileDialog1->ShowDialog()==
System::Windows::Forms::DialogResult::OK) {
if (openFileDialog1->FileName=="")
return;
Uri^ adres =
gcnew Uri("ftp://"+textBox1->Text+"/"+
Path::GetFileName(openFileDialog1->FileName));
FtpWebRequest^ req =
dynamic_cast<FtpWebRequest^>(WebRequest::Create(adres));
req->Credentials=gcnew
NetworkCredential("anonymous","moja_nazwa@moj_adres.pl");
req->Method=WebRequestMethods::Ftp::UploadFile;
FileStream^ stru_plik =
gcnew FileStream(openFileDialog1->FileName,FileMode::Open);
Stream^ req_stream = req->GetRequestStream();
int ile_bajtow;
array<Byte> ^ bufor = gcnew array<Byte>(1024);
do {
ile_bajtow=stru_plik->Read(bufor,0,1024);
req_stream->Write(bufor,0,ile_bajtow);
} while(ile_bajtow!=0);
req_stream->Close();
MessageBox::Show( "Plik wysany",
"Potwierdzenie",MessageBoxButtons::OK,
MessageBoxIcon::Information);
}
}
Po uruchomieniu programu naley wpisa adres serwera wraz z katalogiem, w którym
chcemy umieci plik (na przykad ftp.mojftp.net/upload), a nastpnie najlepiej dla
sprawdzenia pobra spis plików za pomoc przycisku Katalog. Teraz nacinij przycisk
Rozdzia 12.
i Poczenie aplikacji z sieci internet
165
Wylij plik, wybierz plik w oknie dialogowym i kliknij OK — plik zostanie wysany
na serwer. Po wysaniu moesz znowu pobra zawarto katalogu, aby sprawdzi, czy
plik zosta wysany.
Aby program dziaa, serwer musi zezwala na przyjmowanie plików. Jeeli chcesz si
zalogowa na prywatny serwer, musisz poda swój login i haso we waciwoci
Credentials.
Wpisywanie swojego loginu i hasa na stae do programu jest niebezpieczne — raczej
naley doda moliwo wpisywania tych danych do pól tekstowych, skd bd za
kadym razem pobierane.