background image

Microsoft Visual
C++ 2008. Praktyczne
przyk³ady

Autor: Mariusz Owczarek
ISBN: 978-83-246-2587-1
Format: 158×235, stron: 360

• Poznaj w praktyce œrodowisko Visual C++ 2008
• Dowiedz siê, jak korzystaæ z gotowych komponentów programistycznych
• Naucz siê pisaæ w C++ aplikacje przeznaczone dla systemu Windows 

Wiele osób s³ysza³o o jêzyku C++, lecz ogromna wiêkszoœæ z nich na sam¹ myœl
o bli¿szym poznaniu go reaguje z podobn¹ rezerw¹, jak na pomys³ wybrania siê na 
wakacyjny kurs jêzyka mandaryñskiego. Osoby te pope³niaj¹ jednak niewybaczalny 
b³¹d i skutecznie odcinaj¹ siê od niezwykle interesuj¹cego œwiata nowoczesnego 
programowania. Na ludzi biegle znaj¹cych C++ czeka bardzo wiele atrakcyjnych ofert 
pracy, a niemalej¹ca popularnoœæ systemów Windows sprawia, ¿e najbardziej poszukiwani 
w tej grupie s¹ specjaliœci znaj¹cy Visual C++, czyli wygodne w u¿yciu i bardzo 
rozbudowane œrodowisko programistyczne firmy Microsoft. Nie trzeba chyba dodawaæ, 
¿e zarabiaj¹ oni zwykle znacznie wiêcej ni¿ najlepsi nawet t³umacze z jêzyka 
mandaryñskiego…

Jeœli chcesz do³¹czyæ do tej programistycznej elity, ju¿ dziœ siêgnij po odpowiednie 
Ÿród³o wiedzy. Ksi¹¿ka „Microsoft Visual C++ 2008. Praktyczne przyk³ady” umo¿liwi
Ci g³adkie rozpoczêcie przygody z Visual C++, prezentuj¹c podstawowe informacje na 
temat jêzyka, opisuj¹c œrodowisko programistyczne, sposób tworzenia aplikacji oraz 
technikê zarz¹dzania danymi i korzystania z plików. Nauczysz siê z niej równie¿ 
w³aœciwego stosowania elementów kontrolnych i komponentów programistycznych. 
Poznasz metody przetwarzania wielow¹tkowego, zagadnienia zwi¹zane z grafik¹
i ³¹czeniem siê z sieci¹, a ponadto dowiesz siê, jak skonstruowany jest kod programu. 
Na tym jednak nie koniec, bowiem na kilku rozbudowanych i bardzo zró¿nicowanych 
przyk³adach poznasz te¿ praktyczne zastosowanie ca³ej tej teorii, a wszystko przy 
u¿yciu bezp³atnej wersji œrodowiska programistycznego firmy Microsoft.

• Podstawowe informacje na temat Visual C++ 2008
• Instalacja œrodowiska programistycznego
• Elementy sk³adowe aplikacji i sposoby u¿ywania kontrolek
• Zarz¹dzanie danymi i u¿ywanie plików
• U¿ywanie najwa¿niejszych komponentów programistycznych
• Wykorzystanie elementów graficznych
• Podstawy korzystania z w¹tków
• Korzystanie z komponentów sieciowych
• Opis jêzyka C++ i C++/CLI oraz struktury napisanych w nich programów
• Praktyczne projekty aplikacji opracowanych za pomoc¹ Visual C++ 2008

Nie zwlekaj – ju¿ dziœ wkrocz w magiczny œwiat programowania

z wykorzystaniem Visual C++ 2008!

background image

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

background image

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

background image

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

background image

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

background image

Spis tre%ci

7

Obs'uga menu ............................................................................................................... 270
Funkcja rysuj)ca kr)=ki  ................................................................................................ 272
Przek'adanie kr)=ków ................................................................................................... 275
Ró=ne ko<cowe metody ................................................................................................ 278
Test ............................................................................................................................... 279

Rozdzia$ 20. Aplikacja bazy danych  .................................................................. 281

Opis  .............................................................................................................................. 281
Instalacja PostgreSQL  .................................................................................................. 281
Wy')czenie us'ugi bazy  ................................................................................................ 284
Inicjalizacja bazy  .......................................................................................................... 285
Organizacja i typy danych w bazach PostgreSQL  ........................................................ 286
J zyk SQL  .................................................................................................................... 288
Utworzenie bazy danych  .............................................................................................. 288
Interfejs u=ytkownika  ................................................................................................... 290
W')czenie sterowników bazy PostgreSQL do projektu ................................................ 291
X)czenie z baz) i odczyt danych ................................................................................... 292
Dodawanie danych do bazy  .......................................................................................... 294
Zmiana danych w bazie  ................................................................................................ 296
Kasowanie danych ........................................................................................................ 299
Obs'uga bazy  ................................................................................................................ 300
Test ............................................................................................................................... 300

Rozdzia$ 21. Aplikacja do nauki s$ówek ............................................................ 303

Opis  .............................................................................................................................. 303
Interfejs u=ytkownika  ................................................................................................... 303
Deklaracja pól klasy  ..................................................................................................... 305
Odczyt danych z pliku tekstowego  ............................................................................... 306
Odpytywanie ze s'ówek ................................................................................................ 308
Zapis listy wyrazów do pliku tekstowego ..................................................................... 309
Obs'uga ......................................................................................................................... 310
Test ............................................................................................................................... 310

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

Opis  .............................................................................................................................. 313
Interfejs u=ytkownika  ................................................................................................... 313
Ustawienie parametrów kontrolek performanceCounter  .............................................. 314
Odczyt parametrów z kontrolek performanceCounter  .................................................. 316
Uruchamianie timera — ikona w pasku zada<  ............................................................. 316
Rysowanie wykresów  ................................................................................................... 318
Opis  .............................................................................................................................. 321
Test  .............................................................................................................................. 322

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

Opis  .............................................................................................................................. 323
Interfejs u=ytkownika  ................................................................................................... 323
Klasa do obs'ugi FTP  ................................................................................................... 324
Pobieranie katalogu  ...................................................................................................... 326
Pobieranie plików ......................................................................................................... 328
Wysy'anie plików ......................................................................................................... 329
Poruszanie si  po folderach  .......................................................................................... 329
Rozbudowa ................................................................................................................... 331
Test ............................................................................................................................... 331

background image

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

background image

Rozdzia  12.

Po%&czenie aplikacji
z sieci& internet

Komponent WebBrowser

Czasami  istnieje  potrzeba  wy&wietlania  w  oknie  aplikacji  danych  pobranych  bezpo-
&rednio ze stron WWW. W VC++ 2008 mamy komponent, który jest w'a&ciwie kom-
pletn) przegl)dark) stron opart) na Internet Explorerze.

Za pomoc) tego komponentu w prosty sposób mo=na wy&wietla> zawarto&> ca'ych stron
WWW w oknie aplikacji. Mo=e by> on u=yty nie tylko do przegl)dania stron w sieci,
ale tak=e do wy&wietlania dokumentów HTML z komputera lokalnego (na przyk'ad
plików pomocy aplikacji). Podstawowe w'a&ciwo&ci komponentu 

WebBrowser

 przed-

stawia tabela 12.1.

Tabela 12.1. Wybrane w'a(ciwo(ci kontrolki WebBrowser

W$a%ciwo%(

Znaczenie

AllowNavigation

W'a&ciwo&> umo=liwiaj)ca zablokowanie przegl)darki tak, =e nie mo=na przej&>
na inne strony ni= aktualna. Warto&> 

false

 oznacza zablokowanie.

Url

Adres strony do wy&wietlenia w przegl)darce. Ta w'a&ciwo&> jest typu 

Uri^

.

CanGoBack

Warto&> 

true

 oznacza, =e odwiedzana strona nie jest pierwsz) (istnieje historia).

CanGoForward

Warto&>

 true

 oznacza, =e u=ytkownik cofa' si  w historii odwiedzanych stron

i wy&wietlana strona nie jest ostatni) odwiedzon).

Document

W'a&ciwo&> typu 

HtmlDocument

 zawieraj)ca aktualnie wy&wietlan) w kontrolce stron .

Mo=e by> u=yta do pobrania danych ze strony.

DocumentText

Zawiera -ród'o HTML strony aktualnie wy&wietlonej w przegl)darce.

DocumentTitle

Tytu' aktualnie wy&wietlanej strony.

Najprostszy sposób wy&wietlenia strony WWW pokazuje przyk'ad.

background image

154

Microsoft Visual C++ 2008. Praktyczne przyk$ady

Przyk$ad 12.1 __________________________________________________

Po naci&ni ciu przycisku wy&wietl w oknie aplikacji stron  helion.pl.

Rozwi!zanie

Do okna aplikacji wstaw kontrolk  

WebBrowser

 (zak'adka okna narz dziowego, ostatnia

kontrolka w dziale Common Controls) oraz przycisk 

Button

.

Powi ksz rozmiary okna aplikacji i kontrolki 

WebBrowser

 tak, aby zwi kszy> komfort

ogl)dania stron.

Do zdarzenia 

Click

 przycisku przypisz nast puj)c) metod :

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
             Uri^ adres= gcnew Uri("http://helion.pl");
             webBrowser1->Url=adres;
         }

Uruchom aplikacj , po naci&ni ciu przycisku w oknie kontrolki pojawi si  odpowiednia
strona WWW (rysunek 12.1).

Rysunek 12.1. Wy(wietlanie stron WWW w komponencie WebBrowser

Adres przekazywany do w a-ciwo-ci Url nale2y zawsze poprzedza3 prefiksem. W przy-
padku stron WWW jest to http://.

W podobny sposób mo=na wy&wietli> plik lokalny.

Przyk$ad 12.2 __________________________________________________

Utwórz w katalogu na dysku C: folder Aplikacja, a nast pnie w tym folderze plik
pomoc.html o dowolnej tre&ci.

background image

Rozdzia$ 12.   Po$!czenie aplikacji z sieci! internet

155

Wy&wietl w oknie kontrolki 

WebBrowser

 plik pomoc.html znajduj)cy si  w folderze

C:\Aplikacja lub inny plik HTML.

Rozwi!zanie

Zbuduj program identyczny jak w poprzednim przyk'adzie, zmie< jedynie adres doku-
mentu.

Uri^ adres= gcnew Uri("c:\\aplikacja\\pomoc.html");

Program b dzie teraz wy&wietla' plik lokalny.

Klasa kontrolki 

WebBrowser

 posiada te= wiele metod, które umo=liwiaj) nawigacj  po

stronach WWW. Przedstawia je tabela 12.2.

Tabela 12.2. Wybrane metody obiektu WebBrowser

Metoda

Dzia$anie

GoBack()

Przenosi u=ytkownika do poprzedniej strony w historii. Dzia'a
tylko, je=eli w'a&ciwo&> 

CanGoBack==true

.

GoForward()

Przenosi do nast pnej strony w historii, je=eli u=ytkownik cofa'
si  wcze&niej.

GoHome()

Przenosi do strony domowej. Strona domowa jest t) sam), jaka
zosta'a okre&lona w Internet Explorerze.

GoSearch()

Przenosi do strony domy&lnej wyszukiwarki. Równie= lokalizacja
tej strony jest pobierana z Internet Explorera.

Navigate(System::String adres)
Navigate(Uri adres)

Wy&wietla w kontrolce stron  o adresie 

adres

.

Stop()

Zatrzymuje wczytywanie aktualnej strony.

Bez problemu mo=na doda> mo=liwo&> przechodzenia do stron wcze&niej odwiedzo-
nych, tak jak w przegl)darce. Chocia= pisanie kolejnej przegl)darki internetowej mija
si  w'a&ciwie z celem, to nawigacj  mo=na wykorzysta> do opracowania na przyk'ad
plików pomocy czy prezentacji, któr) b dzie mo=na ogl)da> wewn)trz aplikacji.

Przyk$ad 12.3 __________________________________________________

Napisz przegl)dark  stron WWW z mo=liwo&ci) poruszania si  po historii odwiedzanych
stron.

Rozwi!zanie

Utwórz aplikacj  i dodaj do jej okna komponent 

WebBrowser

, dwa przyciski i pole tek-

stowe. We w'a&ciwo&ci

 Text

 pierwszego przycisku wpisz 

Wstecz

, a drugiego — 

Naprzód

.

W polu tekstowym b dziemy wpisywa> stron  do odwiedzenia, jej wczytanie powin-
no nast)pi>, kiedy u=ytkownik naci&nie klawisz Enter. Aby tak si  sta'o, trzeba obs'u-
=y> zdarzenie 

KeyDown

 dla pola tekstowego. Zaznacz pole tekstowe mysz) w widoku

background image

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).

background image

Rozdzia$ 12.   Po$!czenie aplikacji z sieci! internet

157

Tabela 12.3. Niektóre w'a(ciwo(ci obiektu HtmlDocument

W$a%ciwo%(

Znaczenie

All

Tabela obiektów 

HtmlElement

 zawieraj)ca wszystkie cz &ci sk'adowe dokumentu.

Body

Element zawieraj)cy cz &> dokumentu po znaczniku 

BODY

.

Cookie

Zawiera wszystkie znaczniki kontekstu (ang. cookies) powi)zane z danym dokumentem.

Encoding

Kodowanie u=ywane przez aktualny dokument.

Forms

Tabela obiektów 

HtmlElement

 zawieraj)ca wszystkie cz &ci po znacznikach 

FORM

.

Images

Obiekty 

HtmlElement

 reprezentuj)ce cz &ci dokumentu po znacznikach 

IMG

 (obrazy).

Links

Zbiór odno&ników do innych stron zawartych w aktualnym dokumencie.

Title

Tytu' dokumentu.

Przyk$ad 12.4 __________________________________________________

Wypisz w polu tekstowym &cie=ki do wszystkich plików graficznych na stronie WWW
wy&wietlonej w kontrolce 

WebBrowser

.

Rozwi!zanie

Otwórz projekt z przyk'adu 12.3.

Zmniejsz troch  obszar kontrolki 

WebBrowser

 i dodaj do okna aplikacji kolejny przycisk

Button

 oraz pole tekstowe 

TextBox

; ca'o&> niech wygl)da jak na rysunku 12.2.

Rysunek 12.2. Aplikacja pokazuj8ca obiekty graficzne na stronie

background image

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.

background image

Rozdzia$ 12.   Po$!czenie aplikacji z sieci! internet

159

Rozwi!zanie

Utwórz aplikacj  jak w przyk'adzie 12.4.

Po naci&ni ciu trzeciego przycisku odczytamy zawarto&> w'a&ciwo&ci 

Links

 dla danej

strony. Podobnie jak to by'o we w'a&ciwo&ci 

Image

, jest to tablica obiektów 

HtmlElement

,

któr) b dziemy odczytywa> za pomoc) enumeratora.

Oto odpowiednia metoda trzeciego przycisku. W'a&ciwo&> 

InnerText

 obiektu 

HtmlElement

pozwala na odczytanie tekstu zwi)zanego z odno&nikiem.

private: System::Void button3_Click(System::Object^  sender, System::EventArgs^  e) {
             System::Collections::IEnumerator^ odnosnik=
               webBrowser1->Document->Links->GetEnumerator();
             odnosnik->MoveNext();
             while ((odnosnik->MoveNext())&&(odnosnik!=nullptr)) {
                textBox2->AppendText(((HtmlElement^)(odnosnik->Current))->
                  InnerText->ToString()+" ");
                textBox2->AppendText(((HtmlElement^)(odnosnik->Current))->
                  GetAttribute("href")->ToString());
                textBox2->AppendText(System::Environment::NewLine);
             }
         }

Rysunek 12.3 pokazuje aplikacj  w dzia'aniu.

Rysunek 12.3. Wy(wietlanie odno(ników ze strony WWW

background image

160

Microsoft Visual C++ 2008. Praktyczne przyk$ady

Protokó% FTP

Protokó' FTP s'u=y do przesy'ania plików przez internet. Mo=na go u=y> we wn trzu
aplikacji na przyk'ad do automatycznego pobrania uaktualnienia lub potrzebnych plików
z danymi.

Implementacja FTP w .NET Framework jest na poziomie, który nazwa'bym „pó'ni-
skim”, co oznacza, =e nie trzeba mie> wiedzy o FTP, aby si  nim pos'ugiwa>, ale nie
jest to te= kwestia u=ycia jednej metody pobieraj)cej lub wysy'aj)cej pliki. Po')czenia
FTP umo=liwiaj) obiekty dwóch klas: 

FtpWebRequest

 i 

FtpWebResponse

. Pierwszy z nich

reprezentuje zapytanie do serwera FTP, a drugi odpowied- serwera. Do poprawnej pracy
b d) potrzebne dwie w'a&ciwo&ci obiektu 

FtpWebRequest

, które przedstawia tabela 12.4.

Tabela 12.4. Wybrane w'a(ciwo(ci obiektu FtpWebRequest

W$a%ciwo%(

Znaczenie

Credentials

Zawiera login i has'o stosowane przy logowaniu do serwera FTP.

Method

Okre&la rodzaj operacji do wykonania na serwerze. Mo=liwe warto&ci to:

  

WebRequestMethods::Ftp::DownloadFile

 — pobranie pliku,

  

WebRequestMethods::Ftp::UploadFile

 — wys'anie pliku,

  

WebRequestMethods::Ftp::ListDirectoryDetails

 — pobranie szczegó'owych

informacji o plikach znajduj)cych si  na serwerze.

Oprócz tych w'a&ciwo&ci b dziemy u=ywa> dwóch metod opisanych w tabeli 12.5.

Tabela 12.5. Metody obiektu FtpWebRequest s'u@8ce do pobierania lub wysy'ania danych

Metoda

Dzia$anie

GetResponse()

Zwraca obiekt typu 

FtpWebResponse

, z którego mo=emy czyta> dane wysy'ane

przez serwer.

GetRequestStream()

Zwraca strumie<, do którego mo=na pisa> dane, jakie maj) by> wys'ane
na serwer FTP.

Ogólnie zaprogramowanie pobierania danych z FTP wymaga nast puj)cych czynno&ci:

 

a) 

Utworzenie obiektu 

FtpWebRequest

 — parametrem dla konstruktora obiektu

jest adres serwera; w przypadku pobrania lub wys'ania pliku parametrem
jest pe'na &cie=ka wraz z nazw) pliku.

 

b) 

Zapisanie we w'a&ciwo&ci 

Credentials

 loginu i has'a do serwera.

 

c) 

Wybranie czynno&ci (wys'anie b)d- pobranie pliku, pobranie zawarto&ci
katalogu) i odpowiednie ustawienie w'a&ciwo&ci 

Method

.

 

d) 

Wys'anie zapytania do serwera i pobranie odpowiedzi (czyli obiektu

FtpWebResponse

) za pomoc) metody 

GetResponse()

.

 

e) 

Pobranie strumienia odpowiedzi z obiektu 

FtpWebResponse

 i pobieranie z niego

danych (zawarto&ci pliku lub katalogu).

background image

Rozdzia$ 12.   Po$!czenie aplikacji z sieci! internet

161

W przypadku wys'ania pliku na serwer czynno&ci od a) do c) s) takie same, a dalej
mamy:

 

d) 

Otwarcie strumienia do pisania na serwer metod) 

GetRequestStream()

 obiektu

FtpWebRequest

.

 

e) 

Zapisanie danych (zawarto&ci pliku lokalnego) do tego strumienia.

Pobieranie zawarto"ci katalogu
z serwera FTP

Teraz zobaczmy, jak praca z FTP wygl)da w praktyce.

Przyk$ad 12.7 __________________________________________________

Pobierz zawarto&> podanego katalogu z podanego serwera FTP.

Rozwi!zanie

Do nowego okna aplikacji wstaw dwa pola tekstowe 

TextBox

 oraz przycisk 

Button

.

Aby program dzia'a', dodaj do niego mo=liwo&> korzystania z przestrzeni nazw 

System:

 

:Net

 i 

System::IO

, które zawieraj) potrzebne klasy.

   using namespace System::Net;
   using namespace System::IO;

Ustaw w'a&ciwo&> 

Multiline

 pola tekstowego 

textBox2

 na 

true

 i powi ksz je tak, aby

mog'o wy&wietli> kilka linii tekstu.

Metod  obs'uguj)c) zdarzenie 

Click

 napisz jak ni=ej:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
             Uri^ adres = gcnew Uri("ftp://"+textBox1->Text);
             FtpWebRequest^ req =
               dynamic_cast<FtpWebRequest^>(WebRequest::Create(adres));
             req->Credentials=gcnew
               NetworkCredential("anonymous","moja_nazwa@moj_adres.pl");
             req->Method=WebRequestMethods::Ftp::ListDirectoryDetails;
             FtpWebResponse^ resp;
             resp=dynamic_cast<FtpWebResponse^>(req->GetResponse());
             Stream^ resp_stream = resp->GetResponseStream();
             StreamReader^ reader = gcnew StreamReader(resp_stream);
             String^ linia;
             textBox2->Clear();
             while (!reader->EndOfStream) {
                linia=reader->ReadLine();
                textBox2->AppendText(linia+System::Environment::NewLine);
             }
         }

background image

162

Microsoft Visual C++ 2008. Praktyczne przyk$ady

Po uruchomieniu programu wpisz adres dowolnego publicznego serwera FTP i naci&nij
przycisk. W polu tekstowym otrzymasz zawarto&> g'ównego katalogu. Dzia'anie aplika-
cji przedstawia rysunek 12.4. Zapisz aplikacj  na dysku.

Rysunek 12.4.
Aplikacja pobieraj8ca
zawarto(A folderu
z serwera FTP

Pobieranie plików przez FTP

Po znalezieniu potrzebnego pliku mo=na go pobra> na dysk. Rozszerzymy aplikacj 
o tak) mo=liwo&>.

Przyk$ad 12.8 __________________________________________________

Dodaj do aplikacji z przyk'adu 12.7 mo=liwo&> pobrania pliku.

Rozwi!zanie

Otwórz aplikacj  z poprzedniego przyk'adu i umie&> trzeci przycisk 

Button

 oraz jeszcze

jedno pole tekstowe do wpisywania nazwy pliku do pobrania.

Metoda zdarzenia 

Click

 dla drugiego przycisku b dzie mia'a posta>:

private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
             Uri^ adres = gcnew Uri("ftp://"+textBox1->Text+"/"+textBox3->Text);
             FtpWebRequest^ req =
               dynamic_cast<FtpWebRequest^>(WebRequest::Create(adres));
             req->Credentials=gcnew
               NetworkCredential("anonymous","moja_nazwa@moj_adres.pl");
             req->Method=WebRequestMethods::Ftp::DownloadFile;
             FtpWebResponse^ resp=dynamic_cast<FtpWebResponse^>(req->GetResponse());
             Stream^ resp_stream = resp->GetResponseStream();

background image

Czytaj dalej...

Rozdzia$ 12.   Po$!czenie aplikacji z sieci! internet

163

             FileStream^ stru_plik =
               gcnew FileStream("./"+textBox3->Text,FileMode::Create);
             // czytaj plik z serwera i zapisuj do strumienia
             int ile_bajtow;
             array<Byte> ^ bufor = gcnew array<Byte>(1024);
             do {
                ile_bajtow=resp_stream->Read(bufor,0,bufor->Length);
                stru_plik->Write(bufor,0,ile_bajtow);
             } while(ile_bajtow!=0);
             stru_plik->Flush();
             stru_plik->Close();
             resp_stream->Close();
             resp->Close();
         }

Powy=sza metoda dzia'a przy za'o=eniu, =e pole tekstowe 

textBox1

 s'u=y do wpisy-

wania adresu FTP, 

textBox2

 do wy&wietlania zawarto&ci katalogu, a 

textBox3

 do wpi-

sywania nazwy pliku do pobrania.

Po uruchomieniu aplikacji najpierw nale=y wpisa> adres serwera wraz z folderem,
w którym znajduje si  plik, a nast pnie nacisn)> przycisk Katalog. Po wy&wietleniu
listy plików sprawd-, czy plik znajduje si  na tej li&cie, a nast pnie wpisz w polu teksto-
wym jego pe'n) nazw  i naci&nij przycisk Pobierz plik. Po pobraniu plik b dzie si  znaj-
dowa' w folderze roboczym aplikacji. Wygl)d aplikacji przedstawia rysunek 12.5.

Rysunek 12.5.
Aplikacja
do pobierania plików

W przypadku pobierania d u2szych plików metoda pobierania powinna uruchamia3 si>
w osobnym w?tku. W cz>-ci z przyk adami znajduje si> klient korzystaj?cy z oddziel-
nych w?tków.