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