You are on page 1of 20

Microsoft Visual

C++ 2008. Praktyczne


przykady
Autor: Mariusz Owczarek
ISBN: 978-83-246-2587-1
Format: 158235, stron: 360

Poznaj w praktyce rodowisko Visual C++ 2008


Dowiedz si, jak korzysta z gotowych komponentw programistycznych
Naucz si pisa w C++ aplikacje przeznaczone dla systemu Windows
Wiele osb syszao o jzyku C++, lecz ogromna wikszo z nich na sam myl
o bliszym poznaniu go reaguje z podobn rezerw, jak na pomys wybrania si na
wakacyjny kurs jzyka mandaryskiego. Osoby te popeniaj jednak niewybaczalny
bd i skutecznie odcinaj si od niezwykle interesujcego wiata nowoczesnego
programowania. Na ludzi biegle znajcych C++ czeka bardzo wiele atrakcyjnych ofert
pracy, a niemalejca popularno systemw Windows sprawia, e najbardziej poszukiwani
w tej grupie s specjalici znajcy Visual C++, czyli wygodne w uyciu i bardzo
rozbudowane rodowisko programistyczne firmy Microsoft. Nie trzeba chyba dodawa,
e zarabiaj oni zwykle znacznie wicej ni najlepsi nawet tumacze z jzyka
mandaryskiego
Jeli chcesz doczy do tej programistycznej elity, ju dzi signij po odpowiednie
rdo wiedzy. Ksika Microsoft Visual C++ 2008. Praktyczne przykady umoliwi
Ci gadkie rozpoczcie przygody z Visual C++, prezentujc podstawowe informacje na
temat jzyka, opisujc rodowisko programistyczne, sposb tworzenia aplikacji oraz
technik zarzdzania danymi i korzystania z plikw. Nauczysz si z niej rwnie
waciwego stosowania elementw kontrolnych i komponentw programistycznych.
Poznasz metody przetwarzania wielowtkowego, zagadnienia zwizane 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 zrnicowanych
przykadach poznasz te praktyczne zastosowanie caej tej teorii, a wszystko przy
uyciu bezpatnej wersji rodowiska programistycznego firmy Microsoft.
Podstawowe informacje na temat Visual C++ 2008
Instalacja rodowiska programistycznego
Elementy skadowe aplikacji i sposoby uywania kontrolek
Zarzdzanie danymi i uywanie plikw
Uywanie najwaniejszych komponentw programistycznych
Wykorzystanie elementw graficznych
Podstawy korzystania z wtkw
Korzystanie z komponentw sieciowych
Opis jzyka C++ i C++/CLI oraz struktury napisanych w nich programw
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
Gwne okno VC++ 2008 ............................................................................................... 13
Tworzenie nowej aplikacji w VC++ 2008 ........................................................................ 13
Wygld rodowiska w trybie budowy aplikacji .............................................................. 16
Struktura projektu ........................................................................................................... 17
Klasa okna gwnego ...................................................................................................... 18

Rozdzia 2. Podstawowe elementy aplikacji ...................................................... 21


Gwne okno .................................................................................................................. 21
Przyciski ......................................................................................................................... 26
Etykiety .......................................................................................................................... 27
Pola tekstowe .................................................................................................................. 29
Wprowadzanie danych do aplikacji za pomoc pl 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
Skrty klawiaturowe w menu ......................................................................................... 49
Paski narzdzi ................................................................................................................. 51

Rozdzia 4. Tablice, uchwyty i dynamiczne tworzenie obiektw .......................... 55


Tablice ............................................................................................................................ 55
Uchwyty ......................................................................................................................... 59
Dynamiczne tworzenie obiektw operator gcnew ..................................................... 60
Dynamiczna deklaracja tablic ......................................................................................... 61

Microsoft Visual C++ 2008. Praktyczne przykady

Rozdzia 5. Komunikacja aplikacji z plikami ...................................................... 63


Pliki jako rdo danych ................................................................................................. 63
Wyszukiwanie plikw .................................................................................................... 64
Odczyt wasnoci plikw i folderw .............................................................................. 65
Odczyt danych z plikw tekstowych .............................................................................. 66
Zapisywanie tekstu do pliku ........................................................................................... 69
Zapis danych do plikw binarnych ................................................................................. 71
Odczyt z plikw binarnych ............................................................................................. 72

Rozdzia 6. Okna dialogowe ............................................................................. 75


Okno typu MessageBox .................................................................................................. 75
Okno dialogowe otwarcia pliku ...................................................................................... 77
Okno zapisu pliku ........................................................................................................... 79
Okno wyboru koloru ....................................................................................................... 80
Wybr czcionki .............................................................................................................. 81

Rozdzia 7. Moliwoci edycji tekstu w komponencie TextBox .......................... 83


Waciwoci pola TextBox ............................................................................................. 83
Kopiowanie i wklejanie tekstu ze schowka .................................................................... 85
Wyszukiwanie znakw w tekcie ................................................................................... 86
Wstawianie tekstu midzy istniejce linie ...................................................................... 87
Wprowadzanie danych do aplikacji ................................................................................ 88
Prosta konwersja typw 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 wymiarw komrek tabeli do wywietlanego tekstu .............................. 101
Odczytywanie danych z komrek tabeli ....................................................................... 102
Zmiana liczby komrek podczas dziaania aplikacji .................................................... 106
Tabela DataGridView z komrkami rnych typw .................................................... 110
Przyciski w komrkach DataGridViewButtonCell .................................................. 113
Komrki z polami wyboru DataGridViewCheckBoxCell ....................................... 114
Grafika w tabeli komrka DataGridViewImageCell ............................................... 116
Komrka z list rozwijan DataGridViewComboBoxCell ...................................... 117
Odnoniki internetowe w komrkach 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
Piro Pen ...................................................................................................................... 133
Pdzle zwyke i teksturowane ....................................................................................... 135
Rysowanie pojedynczych punktw obiekt Bitmap .................................................. 137
Rysowanie trwae odwieanie rysunku .................................................................. 138

Rozdzia 11. Podstawy aplikacji wielowtkowych ............................................. 141


Wtki ............................................................................................................................ 141
Komunikacja z komponentami z innych wtkw przekazywanie parametrw ........ 143
Przekazywanie parametrw do metody wtku .............................................................. 145
Klasa wtku przekazywanie parametrw z kontrol typu ........................................ 146
Komponent BackgroundWorker ................................................................................... 148

Spis treci

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 plikw przez FTP ........................................................................................ 162
Wysyanie pliku na serwer FTP .................................................................................... 164

Rozdzia 13. Dynamiczne tworzenie okien i komponentw ................................. 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 komponentw tworzonych dynamicznie ..................................... 172
Aplikacja zabezpieczona hasem .................................................................................. 173

Rozdzia 14. Struktura programw C++ i C++/CLI ............................................ 175


Programy korzystajce z konsoli w VC++ 2008 .......................................................... 175
Oglna 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 typw ............................................................................................ 179
Rzutowanie (konwersja) typw ........................................................................... 179
Typ wyliczeniowy ................................................................................................ 180
Operatory ...................................................................................................................... 180
Zapis danych do plikw i odczyt z nich za pomoc operatorw << 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 argumentw przez warto i adres .............................................. 190
Wskaniki do funkcji ........................................................................................... 191
Funkcja main() ............................................................................................................. 192
Przekazywanie parametrw do funkcji main() ..................................................... 193
Struktury i unie ............................................................................................................. 195
Struktury .............................................................................................................. 195
Klasy ............................................................................................................................. 196
Konstruktory i destruktory ................................................................................... 199
Przecianie konstruktorw ................................................................................. 201
Przecianie operatorw ...................................................................................... 202
Statyczne metody i pola klasy .............................................................................. 203
Wskanik zwrotny this ......................................................................................... 204
Dziedziczenie ....................................................................................................... 205

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
Gwne 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 komrkowy .................................................................... 253


Opis .............................................................................................................................. 253
Interfejs uytkownika ................................................................................................... 254
Inicjalizacja planszy ..................................................................................................... 256
Zaznaczanie pl 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 krkw ................................................................................................... 275
Rne 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 sterownikw 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 swek ............................................................ 303


Opis .............................................................................................................................. 303
Interfejs uytkownika ................................................................................................... 303
Deklaracja pl klasy ..................................................................................................... 305
Odczyt danych z pliku tekstowego ............................................................................... 306
Odpytywanie ze swek ................................................................................................ 308
Zapis listy wyrazw do pliku tekstowego ..................................................................... 309
Obsuga ......................................................................................................................... 310
Test ............................................................................................................................... 310

Rozdzia 22. Aplikacja do monitorowania systemu ............................................ 313


Opis .............................................................................................................................. 313
Interfejs uytkownika ................................................................................................... 313
Ustawienie parametrw kontrolek performanceCounter .............................................. 314
Odczyt parametrw z kontrolek performanceCounter .................................................. 316
Uruchamianie timera ikona w pasku zada ............................................................. 316
Rysowanie wykresw ................................................................................................... 318
Opis .............................................................................................................................. 321
Test .............................................................................................................................. 322

Rozdzia 23. Klient FTP .................................................................................... 323


Opis .............................................................................................................................. 323
Interfejs uytkownika ................................................................................................... 323
Klasa do obsugi FTP ................................................................................................... 324
Pobieranie katalogu ...................................................................................................... 326
Pobieranie plikw ......................................................................................................... 328
Wysyanie plikw ......................................................................................................... 329
Poruszanie si po folderach .......................................................................................... 329
Rozbudowa ................................................................................................................... 331
Test ............................................................................................................................... 331

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 testw .................................................................. 341


Skorowidz .................................................................................... 343

Rozdzia 12.

Poczenie aplikacji
z sieci internet
Komponent WebBrowser
Czasami istnieje potrzeba wywietlania w oknie aplikacji danych pobranych bezporednio ze stron WWW. W VC++ 2008 mamy komponent, ktry jest waciwie kompletn przegldark stron opart na Internet Explorerze.
Za pomoc tego komponentu w prosty sposb mona wywietla zawarto caych stron
WWW w oknie aplikacji. Moe by on uyty nie tylko do przegldania stron w sieci,
ale take do wywietlania dokumentw HTML z komputera lokalnego (na przykad
plikw pomocy aplikacji). Podstawowe waciwoci komponentu WebBrowser przedstawia 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 rdo HTML strony aktualnie wywietlonej w przegldarce.

DocumentTitle

Tytu aktualnie wywietlanej strony.

Najprostszy sposb 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 przypadku stron WWW jest to http://.

W podobny sposb mona wywietli plik lokalny.

Przykad 12.2 __________________________________________________


Utwrz 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 dokumentu.
Uri^ adres= gcnew Uri("c:\\aplikacja\\pomoc.html");

Program bdzie teraz wywietla plik lokalny.


Klasa kontrolki WebBrowser posiada te wiele metod, ktre 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. Rwnie 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 odwiedzonych, tak jak w przegldarce. Chocia pisanie kolejnej przegldarki internetowej mija
si waciwie z celem, to nawigacj mona wykorzysta do opracowania na przykad
plikw pomocy czy prezentacji, ktr bdzie mona oglda wewntrz aplikacji.

Przykad 12.3 __________________________________________________


Napisz przegldark stron WWW z moliwoci poruszania si po historii odwiedzanych
stron.

Rozwizanie
Utwrz aplikacj i dodaj do jej okna komponent WebBrowser, dwa przyciski i pole tekstowe. We waciwoci Text pierwszego przycisku wpisz Wstecz, a drugiego Naprzd.
W polu tekstowym bdziemy wpisywa stron do odwiedzenia, jej wczytanie powinno nastpi , kiedy uytkownik nacinie klawisz Enter. Aby tak si stao, trzeba obsuy 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 parametrw tej
metody bdzie rodzaj nacinitego klawisza. Oto kod tej metody, w ktrym 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 przyciskw odpowiednio: cofajce 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 wyprbowaniu 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, ktra reprezentuje dokument
tego typu. Za pomoc tego obiektu uzyskujemy dostp do poszczeglnych czci skadowych pliku HTML. Te czci skadowe s zawarte w obiektach HtmlElement. Obiekt
typu HtmlDocument grupuje wic kilka obiektw HtmlElement.
Waciwoci obiektu HtmlDocument przedstawia tabela 12.3.
Obiekt HtmlElement posiada waciwoci oglne odnoszce si do wszystkich rodzajw sekcji kodu HTML. Najbardziej interesujce s zwykle waciwoci szczeglne,
odnoszce si do konkretnych czci kodu, na przykad znacznik SRC w kodzie wstawiania obrazka oznacza ciek do pliku graficznego. Dostp do tych szczeglnych waciwoci uzyskujemy za pomoc metod GetAttribute() lub SetAttribute(). Argumentami
tych metod jest znacznik w kodzie, do ktrego chcemy uzyska dostp (na przykad
SRC dla odczytania cieki dostpu do obrazka).

Rozdzia 12. i Poczenie aplikacji z sieci internet

157

Tabela 12.3. Niektre waciwoci obiektu HtmlDocument


Waciwo

Znaczenie

All

Tabela obiektw 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 obiektw HtmlElement zawierajca wszystkie czci po znacznikach FORM.

Images

Obiekty HtmlElement reprezentujce czci dokumentu po znacznikach IMG (obrazy).

Links

Zbir odnonikw do innych stron zawartych w aktualnym dokumencie.

Title

Tytu dokumentu.

Przykad 12.4 __________________________________________________


Wypisz w polu tekstowym cieki do wszystkich plikw graficznych na stronie WWW
wywietlonej w kontrolce WebBrowser.

Rozwizanie
Otwrz 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 obrazkw zawartych na wywietlanej stronie WWW. Aby to zrobi ,
skorzystamy z waciwoci Image obiektu HtmlDocument. Waciwo Image jest typu
tablicowego, do odczytu jej elementw uyjemy enumeratora (porwnaj 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 sposb mona te napisa program, ktry bdzie sprawdza, czy dana strona
WWW posuguje si jakimi znacznikami kontekstu. Wykorzystamy do tego odpowiedni waciwo obiektu HtmlDocument.

Przykad 12.5 __________________________________________________


Wyposa przegldark w moliwo podgldu znacznikw kontekstu na danej stronie.

Rozwizanie
Utwrz 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 znacznikw 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
Utwrz 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 obiektw HtmlElement,
ktr 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 odnonikw ze strony WWW

160

Microsoft Visual C++ 2008. Praktyczne przykady

Protok FTP
Protok FTP suy do przesyania plikw przez internet. Mona go uy we wntrzu
aplikacji na przykad do automatycznego pobrania uaktualnienia lub potrzebnych plikw
z danymi.
Implementacja FTP w .NET Framework jest na poziomie, ktry nazwabym pniskim, 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 dwch 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, ktre 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 szczegowych
informacji o plikach znajdujcych si na serwerze.

Oprcz tych waciwoci bdziemy uywa dwch 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 ktrego moemy czyta dane wysyane


przez serwer.

GetRequestStream()

Zwraca strumie, do ktrego mona pisa dane, jakie maj by wysane


na serwer FTP.

Oglnie 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, ktre 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 gwnego katalogu. Dziaanie aplikacji przedstawia rysunek 12.4. Zapisz aplikacj na dysku.
Rysunek 12.4.
Aplikacja pobierajca
zawarto folderu
z serwera FTP

Pobieranie plikw 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
Otwrz 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 wpisywania adresu FTP, textBox2 do wywietlania zawartoci katalogu, a textBox3 do wpisywania nazwy pliku do pobrania.
Po uruchomieniu aplikacji najpierw naley wpisa adres serwera wraz z folderem,
w ktrym znajduje si plik, a nastpnie nacisn przycisk Katalog. Po wywietleniu
listy plikw sprawd, czy plik znajduje si na tej licie, a nastpnie wpisz w polu tekstowym jego pen nazw i nacinij przycisk Pobierz plik. Po pobraniu plik bdzie si znajdowa w folderze roboczym aplikacji. Wygld aplikacji przedstawia rysunek 12.5.
Rysunek 12.5.
Aplikacja
do pobierania plikw

W przypadku pobierania duszych plikw metoda pobierania powinna uruchamia si


w osobnym wtku. W czci z przykadami znajduje si klient korzystajcy z oddzielnych wtkw.

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 plikw z dysku
lokalnego na serwer.

Rozwizanie
Otwrz aplikacj z poprzedniego przykadu i umie trzeci przycisk Button oraz komponent systemowego okna otwarcia pliku OpenFileDialog. We waciwoci Text trzeciego przycisku wpisz Wylij plik.
Po naciniciu przycisku powinno si pojawi standardowe okno wyboru pliku, w ktrym
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 ktrym


chcemy umieci plik (na przykad ftp.mojftp.net/upload), a nastpnie najlepiej dla
sprawdzenia pobra spis plikw 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 plikw. Jeeli chcesz si
zalogowa na prywatny serwer, musisz poda swj 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 pl tekstowych, skd bd za
kadym razem pobierane.

You might also like