SlideShare a Scribd company logo
1 of 11
Download to read offline
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   MS Visual C++.
                                         Æwiczenia
           KATALOG KSI¥¯EK
                                         Autor: Adam Majczak
                      KATALOG ONLINE     ISBN: 83-7361-206-8
                                         Format: B5, stron: 122
       ZAMÓW DRUKOWANY KATALOG


              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA     Visual C++ to popularne rodowisko RAD (szybkiego tworzenia aplikacji). Dziêki
                                         intuicyjnej obs³udze jest ono nie tylko wygodnym narzêdziem dla profesjonalistów
                                         tworz¹cych zaawansowane aplikacje dla Windows, ale tak¿e bezpiecznym „polem
         CENNIK I INFORMACJE             do wiadczalnym” dla wszystkich tych, którzy chc¹ spróbowaæ swoich si³
                                         w programowaniu w C++.
                   ZAMÓW INFORMACJE      Niniejsza ksi¹¿ka stanowi praktyczne uzupe³nienie podrêcznika lub kursu
                     O NOWO CIACH        programowania w C++. Mo¿e byæ dla Ciebie zbiorem zadañ wykonywanych jako
                                         indywidualne prace domowe, mo¿e byæ tak¿e potraktowana jako zbiór „podpowiedzi”
                       ZAMÓW CENNIK      pokazuj¹cy, jak zawodowcy rozwi¹zuj¹ niektóre typowe problemy wystêpuj¹ce przy
                                         programowaniu w C++ i Visual C++. Wiêcej w niej praktycznych zadañ dla programisty
                                         ni¿ teoretycznych rozwa¿añ o niuansach sztuki programowania w C++.
                 CZYTELNIA               Ksi¹¿ka opisuje:
          FRAGMENTY KSI¥¯EK ONLINE          • Aplikacje konsolowe ANSI C++
                                            • Programowanie sekwencyjne w Visual C++
                                            • Konstruowanie aplikacji zdarzeniowych i obiektowych
                                            • Wyprowadzanie danych w trybie graficznym
                                            • Korzystanie z szablonów
                                            • Obs³ugê wyj¹tków
                                            • Tworzenie aplikacji w rodowisku graficznym
                                            • Stosowanie biblioteki klas MFC w Visual C++
                                            • Wprowadzenie do MS VisualStudio.NET



Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
                    Wprowadzenie ........................................................................................................................................... 5
                    Jak korzystać z tej ksią ki?.................................................................................................. 6
Rozdział 1.         Aplikacje konsoli w stylu ANSI C i podstawowe operacje w Visual C++ ...................... 7
                    Podsumowanie................................................................................................................... 15
Rozdział 2. Aplikacje konsoli w stylu ANSI C++,
            programowanie sekwencyjne w Visual C++ ............................................................................ 17
                    Wprowadzanie danych w ruchu programu
                     i rozbie ności w składni ANSI C i ANSI C++............................................................... 19
                    Podsumowanie................................................................................................................... 26
Rozdział 3. Style programowania — konstruowanie aplikacji
            zdarzeniowych i obiektowych, firmowe przykłady VC++................................................... 27
                    Wprowadzenie ................................................................................................................... 27
                          Pętla pobierania wiadomości o zdarzeniach w programie zdarzeniowym...................................29
                          Procedury — handlery obsługi zdarzeń .......................................................................................30
                          Jak obiekty mogą reagować na komunikaty o zdarzeniach .........................................................31
                    Podsumowanie................................................................................................................... 42
Rozdział 4. Ewolucja sposobów tworzenia aplikacji w wizualnym środowisku Windows.......43
                    Wprowadzenie ................................................................................................................... 43
                          Zamiana liczb dziesiętnych na dwójkowe....................................................................................44
                          Wyprowadzanie danych w trybie graficznym z zastosowaniem prostego buforowania .................46
                    Podsumowanie................................................................................................................... 53
Rozdział 5. Szablony i obsługa wyjątków............................................................................................................. 55
                    Wprowadzenie ................................................................................................................... 55
                          Obsługa sytuacji wyjątkowych w C++ ........................................................................................55
                          Konstruowanie i stosowanie szablonów ......................................................................................59
                    Podsumowanie................................................................................................................... 62
Rozdział 6. Wizualne aplikacje dla graficznego środowiska Windows............................................ 63
                    Zasady programowania zdarzeniowego dla Windows — wprowadzenie......................... 67
                          Rozbudowa głównej funkcji WinMain() .....................................................................................67
                          Konstrukcja głównej funkcji obsługującej komunikaty....................................................................69
                          Obsługa komunikatu WM_PAINT ..............................................................................................71
                          Pętla pobierania komunikatów o zdarzeniach od Windows.........................................................72
                          Przykładowy, prosty kod aplikacji zdarzeniowej.........................................................................73
                    Podsumowanie................................................................................................................... 89
4                                                                                                                                 MS Visual C++. Ćwiczenia


Rozdział 7.      Stosowanie biblioteki klas MFC w Visual C++......................................................................... 91
                 Wprowadzenie: dlaczego i w jaki sposób trzeba modyfikować kody
                  generowane przez kreator Visual C++? ......................................................................... 93
                       Klasa „Dokument” a operacje plikowe ........................................................................................93
                 Podsumowanie................................................................................................................... 97
Rozdział 8. VisualStudio.NET — ćwiczenia wprowadzające ........................................................................ 99
                 Podsumowanie................................................................................................................. 104
Rozdział 9. Tworzymy aplikacje w środowisku VisualStudio.NET w C# i w C++.......................... 105
                 Podsumowanie................................................................................................................. 111
Rozdział 10. Konstruowanie wizualnych komponentów sterujących w VisualStudio.NET....... 113
                 Podsumowanie................................................................................................................. 120
                 Zakończenie ............................................................................................................................................ 121
                 I co dalej?......................................................................................................................... 121
5.                            Rozdział

                                 Szablony
                       i obsługa wyjątków
     Podobnie jak w przypadku bibliotek klas (MFC, OWL, itp.) i bibliotek komponentów
     wizualnych (np. VCL), producenci kompilatorów C++ często dodają do IDE biblioteki
     szablonów (templates). W Visual C++ jest to biblioteka ATL (Active Template Library),
     popularną i szeroko dostępną wersją jest STL (Standard Templates Library). Te dość
     zło one zagadnienia wymagają przed przystąpieniem do ćwiczeń krótkiego wyjaśnienia
     i wprowadzenia.



Wprowadzenie
     Wykorzystanie szablonów i obsługa sytuacji wyjątkowych EH (Exception Handling) to
     kolejne dwa elementy, które silnie wpływają na styl programowania i praktyczny spo-
     sób konstruowania aplikacji Visual C++. Zrozumienie tych zagadnień jest niezbędne do
     świadomego i umiejętnego korzystania z mo liwości Visual C++. Mechanizmy te najła-
     twiej wyjaśnić i zademonstrować w najprostszych aplikacjach, dlatego to ostatni rozdział,
     w którym będziemy się jeszcze posługiwać znakowymi aplikacjami konsoli. W następnych
     rozdziałach, posiadając ju w spory zasób wiedzy, umiejętności i praktycznych doświad-
     czeń w pracy z Visual C++, wykorzystamy to wszystko, by nasze aplikacje umiejętnie
     wykorzystywały mo liwości środowiska Windows.


Obsługa sytuacji wyjątkowych w C++
     W C++ wyjątek lub sytuacja wyjątkowa to w istocie obiekt, który jest przekazywany
     (przy okazji wraz z pewnymi informacjami) z tego obszaru w kodzie, gdzie wystąpił
     problem do tego obszaru w kodzie, który zajmuje się „pokojowym rozwiązaniem” tego
56                                                                          MS Visual C++. Ćwiczenia


          problemu. Określenie „pokojowe rozwiązanie” oznacza tu przemyślaną obsługę sytuacji
          konfliktowej typu: brak pamięci operacyjnej, nie istnieje potrzebny plik dyskowy, próba
          dzielenia przez zero, itp., która w normalnych warunkach mogłaby spowodować prze-
          rwanie działania programu i, co groźniejsze, często utratę danych trudnych do odzyskania
          i odtworzenia.

          Rodzaj wyra enia (obiektu — wyjątku) mo e decydować o tym, która część kodu podejmie
          próbę rozwiązania konfliktowej sytuacji. Zawartość tak „przerzucanego obiektu-wyjątku”
          (ang. throw-n object) mo e decydować o sposobie powrotu do dalszej pracy aplikacji
          i o sposobie informowania u ytkownika o wystąpieniu i obsłudze sytuacji wyjątkowej.
          Podstawowe zasady logiki obsługi wyjątków sprowadzają się do następujących działań:
            1. Zidentyfikowanie tych fragmentów kodu, które potencjalnie mogą spowodować
              wystąpienie sytuacji wyjątkowej i ujęcie ich w bloki typu try (spróbuj).
                VT[
                ]
                   -QF CYKGTCLCE[ T[[MQYPG QRGTCELG
                
                _

            2. Utworzenie bloków obsługi (dosł.: catch — przechwyć) przewidywanych,
              mo liwych sytuacji wyjątkowych.
                ECVEJ
 1WV1H/GOQT[ 
                ]
                    EQU TQDKO[ D[ WTCVQYCè CRNKMCELú
                
                _
                ECVEJ
 (KNG0QV(QWPF 
                ]
                    TQDKO[ EQU KPPGIQ
                
                _
                  KVF 

          Z technicznego punktu widzenia bloki ECVEJ powinny w kodzie występować bezpo-
          średnio po bloku VT[. Sterowanie zostanie przekazane do bloku ECVEJ tylko wtedy, gdy
          przewidywana sytuacja wyjątkowa rzeczywiście wystąpi.
          Przykładowy kod pokazany poni ej ilustruje praktyczne zastosowanie najprostszego,
          „pustego” obiektu-wyjątku przeznaczonego do obsługi typowej sytuacji konfliktowej —
          próby zapisania do macierzy elementu, dla którego nie ma przewidzianego miejsca (spoza
          dopuszczalnego zakresu indeksu-offsetu), co mo e w praktyce zagra ać przerwaniem pra-
          cy aplikacji i utratą danych. Listing 5.1 i rysunek 5.1 przedstawiają prosty przykład ob-
          sługi wyjątku.

Listing 5.1. Obsługa wyjątku — ExHandle1.CPP
             KPENWFG KQUVTGCOJ
            EQPUV KPV GHCWNV5KG  
            ENCUU CWQ ]_  FGHKPKELC MNCU[ FNC QDKGMVW  Y[LCVMW
            ENCUU #TTC[
            ]
            RTKXCVG
            KPV
2QKPVGT  CPG RT[YCVPG
Rozdział 5.   Szablony i obsługa wyjątków                                              57


Rysunek 5.1.
Obsługa
sytuacji wyjątkowej
w działaniu. Aplikacja
konsoli Visual C++
o nazwie projektu
ExHandle1




              KPV TQOKCT  YUMCPKM K TQOKCT OCEKGT[
              RWDNKE
              #TTC[
KPV TQOKCT  GHCWNV5KG       YC MQPUVTWMVQT[
              #TTC[
EQPUV #TTC[ /CEKGT
              `#TTC[
 ] FGNGVG =? 2QKPVGT_
              #TTC[ QRGTCVQT
EQPUV #TTC[                  2TGEKCQPG QRGTCVQT[
              KPV QRGTCVQT=?
KPV QHH5GV
              EQPUV KPV QRGTCVQT=?
KPV QHH5GV EQPUV
              KPV 2QFCL4QOKCT
 EQPUV ] TGVWTP TQOKCT _  Y[MNC OGVQFC
              HTKGPF QUVTGCO QRGTCVQT 
QUVTGCO  EQPUV #TTC[ 
              _
              #TTC[#TTC[
KPV UKG  TQOKCT
UKG
              ]
              2QKPVGT  PGY KPV=UKG?
              HQT 
KPV K   KUKG K

 2QKPVGT=K?  
              _
              #TTC[ #TTC[QRGTCVQT
EQPUV #TTC[ /CEKGT
              ]
              KH 
VJKU  /CEKGT
              TGVWTP
VJKU
              FGNGVG =? 2QKPVGT
              TQOKCT  /CEKGT2QFCL4QOKCT

              2QKPVGT  PGY KPV=TQOKCT?
              HQT 
KPV K KTQOKCT K


              2QKPVGT=K?  /CEKGT=K?
              TGVWTP
VJKU
              _
              #TTC[#TTC[
EQPUV #TTC[ /CEKGT
              ]
              TQOKCT  /CEKGT2QFCL4QOKCT

              2QKPVGT  PGY KPV=TQOKCT?
              HQT 
KPV K   KTQOKCT K


              2QKPVGT=K?  /CEKGT=K?
              _
              KPV #TTC[QRGTCVQT=?
KPV QHH5GV
              ]
              KPV UKG  2QFCL4QOKCT

              KH 
QHH5GV       QHH5GV  2QFCL4QOKCT

                TGVWTP 2QKPVGT=QHH5GV?
              GNUG
                ]
                       VJTQY CWQ
  TWECP[ QDKGMV  Y[LCVGM
                TGVWTP 2QKPVGT=QHH5GV?
                _
58                                                                       MS Visual C++. Ćwiczenia


            _
            EQPUV KPV #TTC[QRGTCVQT=?
KPV QHH5GV EQPUV
            ]
            KPV O[UKG  2QFCL4QOKCT

            KH 
QHH5GV       QHH5GV  2QFCL4QOKCT

            TGVWTP 2QKPVGT=QHH5GV?
            VJTQY CWQ

            TGVWTP 2QKPVGT=QHH5GV?
            _
            QUVTGCO QRGTCVQT 
QUVTGCO QWVRWV EQPUV #TTC[ VJG#TTC[
            ]
            HQT 
KPV K   KVJG#TTC[2QFCL4QOKCT
 K


            QWVRWV  =  K  ?  VJG#TTC[=K?  GPFN
            TGVWTP QWVRWV
            _

            KPV OCKP

            ]
            #TTC[ KPV#TTC[

            VT[
            ]
            HQT 
KPV L   L  L


              ]
              KPV#TTC[=L?  L
              EQWV  7FCPG =  L  ?  L  GPFN
              _
            _
            ECVEJ 
CWQ           2TGEJY[EGPKG QDKGMVW  Y[LCVMW
              ]
              EQWV  1$5.7)# 5;67#%,+ 9;,#6-19', P 
              _
            EQWV  2TQITCO OQG FKCNCE FCNGL  GPFN
            EQWV  FCNUG FKCNCPKG RTQITCOW  GPFN
            TGVWTP 
            _


          To dobra okazja, by sprawdzić, jak na zakładce ClassView w panelu struktury projektu
          Visual C++ prezentowana jest hierarchia klas w przykładowej aplikacji (rysunek 5.2).

Rysunek 5.2.
Hierarchia klas
na zakładce ClassView
w panelu struktury
Visual C++




          Powy szy przykładowy prosty kod przy okazji demonstruje przecią anie operatorów przy
          u yciu metod oraz funkcji zewnętrznej kategorii friend.
Rozdział 5.    Szablony i obsługa wyjątków                                                      59



Konstruowanie i stosowanie szablonów
              Szablony wymagają zastosowania słowa kluczowego C++ VGORNCVG. Szablony mo na
              stosować w odniesieniu do funkcji. Oto prosty przykład parametryzacji algorytmu sor-
              towania bąbelkowego przy u yciu szablonu
               VGORNCVG ENCUU 8
               XQKF 8GEVQT$WDNG5QTV
8 YGMVQT=? KPV TQOKCT

              dla jednowymiarowej macierzy (wektora) stanowiącej argument funkcji sortującej.

Listing 5.2. Konstrukcja i zastosowanie prostego szablonu: TemplateDemo1.CPP
                6GRNCVGGOQ UCDNQP W[V[ PC NKUEKG CTIWOGPVÎY HWPMELK
                KPENWFG KQUVTGCOJ

               VGORNCVG ENCUU 8
               XQKF 8GEVQT$WDNG5QTV
 8 YGMVQT=? KPV TQOKCT 
               ]
                 HQT
KPV K K
TQOKCT K


                        HQT
KPV L
TQOKCT KL L
                               KH
 YGMVQT=L? YGMVQT=L? 
                               ]
                                       8 V[OECUQYC  YGMVQT=L?
                                       YGMVQT=L?  YGMVQT=L?
                                       YGMVQT=L?  V[OECUQYC
                               _
               _

               OCKP

               ]
               KPV 0WOGTMK=?  ]      _
               EJCT .KVGTMK=?  ] F  #  V    C _

               8GEVQT$WDNG5QTV
0WOGTMK UKGQH
0WOGTMKUKGQH
0WOGTMK=?
               8GEVQT$WDNG5QTV
.KVGTMK UKGQH
.KVGTMKUKGQH
.KVGTMK=?
               HQT
KPV K KUKGQH
0WOGTMKUKGQH
0WOGTMK=? K


               EQWV  0WO=  K  ?  0WOGTMK=K?  GPFN
               HQT
K KUKGQH
.KVGTMKUKGQH
.KVGTMK=? K


               EQWV  .KV=  K  ?  .KVGTMK=K?  GPFN
               TGVWTP 
               _


              Szablony zastosowane w odniesieniu do klas powodują utworzenie rodziny klas. Kom-
              pilator mo e następnie wygenerować samodzielnie nową klasę na podstawie zadanego
              szablonu. A oto prosty przykład kolejkowania z zastosowaniem szablonu wobec własnej
              klasy $7(14.

Listing 5.3. Drugi szablon: TemplateDemo2.CPP
                KPENWFG KQUVTGCOJ
               EQPUV GHCWNV5KG  
               VGORNCVG ENCUU -
               ENCUU $7(14
               ]

More Related Content

More from Wydawnictwo Helion

Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieWydawnictwo Helion
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++Wydawnictwo Helion
 
Microsoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaMicrosoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaWydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanie
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++
 
Microsoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaMicrosoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga eksperta
 

MS Visual C++. Ćwiczenia

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI MS Visual C++. Æwiczenia KATALOG KSI¥¯EK Autor: Adam Majczak KATALOG ONLINE ISBN: 83-7361-206-8 Format: B5, stron: 122 ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK DODAJ DO KOSZYKA Visual C++ to popularne rodowisko RAD (szybkiego tworzenia aplikacji). Dziêki intuicyjnej obs³udze jest ono nie tylko wygodnym narzêdziem dla profesjonalistów tworz¹cych zaawansowane aplikacje dla Windows, ale tak¿e bezpiecznym „polem CENNIK I INFORMACJE do wiadczalnym” dla wszystkich tych, którzy chc¹ spróbowaæ swoich si³ w programowaniu w C++. ZAMÓW INFORMACJE Niniejsza ksi¹¿ka stanowi praktyczne uzupe³nienie podrêcznika lub kursu O NOWO CIACH programowania w C++. Mo¿e byæ dla Ciebie zbiorem zadañ wykonywanych jako indywidualne prace domowe, mo¿e byæ tak¿e potraktowana jako zbiór „podpowiedzi” ZAMÓW CENNIK pokazuj¹cy, jak zawodowcy rozwi¹zuj¹ niektóre typowe problemy wystêpuj¹ce przy programowaniu w C++ i Visual C++. Wiêcej w niej praktycznych zadañ dla programisty ni¿ teoretycznych rozwa¿añ o niuansach sztuki programowania w C++. CZYTELNIA Ksi¹¿ka opisuje: FRAGMENTY KSI¥¯EK ONLINE • Aplikacje konsolowe ANSI C++ • Programowanie sekwencyjne w Visual C++ • Konstruowanie aplikacji zdarzeniowych i obiektowych • Wyprowadzanie danych w trybie graficznym • Korzystanie z szablonów • Obs³ugê wyj¹tków • Tworzenie aplikacji w rodowisku graficznym • Stosowanie biblioteki klas MFC w Visual C++ • Wprowadzenie do MS VisualStudio.NET Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Wprowadzenie ........................................................................................................................................... 5 Jak korzystać z tej ksią ki?.................................................................................................. 6 Rozdział 1. Aplikacje konsoli w stylu ANSI C i podstawowe operacje w Visual C++ ...................... 7 Podsumowanie................................................................................................................... 15 Rozdział 2. Aplikacje konsoli w stylu ANSI C++, programowanie sekwencyjne w Visual C++ ............................................................................ 17 Wprowadzanie danych w ruchu programu i rozbie ności w składni ANSI C i ANSI C++............................................................... 19 Podsumowanie................................................................................................................... 26 Rozdział 3. Style programowania — konstruowanie aplikacji zdarzeniowych i obiektowych, firmowe przykłady VC++................................................... 27 Wprowadzenie ................................................................................................................... 27 Pętla pobierania wiadomości o zdarzeniach w programie zdarzeniowym...................................29 Procedury — handlery obsługi zdarzeń .......................................................................................30 Jak obiekty mogą reagować na komunikaty o zdarzeniach .........................................................31 Podsumowanie................................................................................................................... 42 Rozdział 4. Ewolucja sposobów tworzenia aplikacji w wizualnym środowisku Windows.......43 Wprowadzenie ................................................................................................................... 43 Zamiana liczb dziesiętnych na dwójkowe....................................................................................44 Wyprowadzanie danych w trybie graficznym z zastosowaniem prostego buforowania .................46 Podsumowanie................................................................................................................... 53 Rozdział 5. Szablony i obsługa wyjątków............................................................................................................. 55 Wprowadzenie ................................................................................................................... 55 Obsługa sytuacji wyjątkowych w C++ ........................................................................................55 Konstruowanie i stosowanie szablonów ......................................................................................59 Podsumowanie................................................................................................................... 62 Rozdział 6. Wizualne aplikacje dla graficznego środowiska Windows............................................ 63 Zasady programowania zdarzeniowego dla Windows — wprowadzenie......................... 67 Rozbudowa głównej funkcji WinMain() .....................................................................................67 Konstrukcja głównej funkcji obsługującej komunikaty....................................................................69 Obsługa komunikatu WM_PAINT ..............................................................................................71 Pętla pobierania komunikatów o zdarzeniach od Windows.........................................................72 Przykładowy, prosty kod aplikacji zdarzeniowej.........................................................................73 Podsumowanie................................................................................................................... 89
  • 3. 4 MS Visual C++. Ćwiczenia Rozdział 7. Stosowanie biblioteki klas MFC w Visual C++......................................................................... 91 Wprowadzenie: dlaczego i w jaki sposób trzeba modyfikować kody generowane przez kreator Visual C++? ......................................................................... 93 Klasa „Dokument” a operacje plikowe ........................................................................................93 Podsumowanie................................................................................................................... 97 Rozdział 8. VisualStudio.NET — ćwiczenia wprowadzające ........................................................................ 99 Podsumowanie................................................................................................................. 104 Rozdział 9. Tworzymy aplikacje w środowisku VisualStudio.NET w C# i w C++.......................... 105 Podsumowanie................................................................................................................. 111 Rozdział 10. Konstruowanie wizualnych komponentów sterujących w VisualStudio.NET....... 113 Podsumowanie................................................................................................................. 120 Zakończenie ............................................................................................................................................ 121 I co dalej?......................................................................................................................... 121
  • 4. 5. Rozdział Szablony i obsługa wyjątków Podobnie jak w przypadku bibliotek klas (MFC, OWL, itp.) i bibliotek komponentów wizualnych (np. VCL), producenci kompilatorów C++ często dodają do IDE biblioteki szablonów (templates). W Visual C++ jest to biblioteka ATL (Active Template Library), popularną i szeroko dostępną wersją jest STL (Standard Templates Library). Te dość zło one zagadnienia wymagają przed przystąpieniem do ćwiczeń krótkiego wyjaśnienia i wprowadzenia. Wprowadzenie Wykorzystanie szablonów i obsługa sytuacji wyjątkowych EH (Exception Handling) to kolejne dwa elementy, które silnie wpływają na styl programowania i praktyczny spo- sób konstruowania aplikacji Visual C++. Zrozumienie tych zagadnień jest niezbędne do świadomego i umiejętnego korzystania z mo liwości Visual C++. Mechanizmy te najła- twiej wyjaśnić i zademonstrować w najprostszych aplikacjach, dlatego to ostatni rozdział, w którym będziemy się jeszcze posługiwać znakowymi aplikacjami konsoli. W następnych rozdziałach, posiadając ju w spory zasób wiedzy, umiejętności i praktycznych doświad- czeń w pracy z Visual C++, wykorzystamy to wszystko, by nasze aplikacje umiejętnie wykorzystywały mo liwości środowiska Windows. Obsługa sytuacji wyjątkowych w C++ W C++ wyjątek lub sytuacja wyjątkowa to w istocie obiekt, który jest przekazywany (przy okazji wraz z pewnymi informacjami) z tego obszaru w kodzie, gdzie wystąpił problem do tego obszaru w kodzie, który zajmuje się „pokojowym rozwiązaniem” tego
  • 5. 56 MS Visual C++. Ćwiczenia problemu. Określenie „pokojowe rozwiązanie” oznacza tu przemyślaną obsługę sytuacji konfliktowej typu: brak pamięci operacyjnej, nie istnieje potrzebny plik dyskowy, próba dzielenia przez zero, itp., która w normalnych warunkach mogłaby spowodować prze- rwanie działania programu i, co groźniejsze, często utratę danych trudnych do odzyskania i odtworzenia. Rodzaj wyra enia (obiektu — wyjątku) mo e decydować o tym, która część kodu podejmie próbę rozwiązania konfliktowej sytuacji. Zawartość tak „przerzucanego obiektu-wyjątku” (ang. throw-n object) mo e decydować o sposobie powrotu do dalszej pracy aplikacji i o sposobie informowania u ytkownika o wystąpieniu i obsłudze sytuacji wyjątkowej. Podstawowe zasady logiki obsługi wyjątków sprowadzają się do następujących działań: 1. Zidentyfikowanie tych fragmentów kodu, które potencjalnie mogą spowodować wystąpienie sytuacji wyjątkowej i ujęcie ich w bloki typu try (spróbuj). VT[ ] -QF CYKGTCLCE[ T[[MQYPG QRGTCELG _ 2. Utworzenie bloków obsługi (dosł.: catch — przechwyć) przewidywanych, mo liwych sytuacji wyjątkowych. ECVEJ 1WV1H/GOQT[ ] EQU TQDKO[ D[ WTCVQYCè CRNKMCELú _ ECVEJ (KNG0QV(QWPF ] TQDKO[ EQU KPPGIQ _ KVF Z technicznego punktu widzenia bloki ECVEJ powinny w kodzie występować bezpo- średnio po bloku VT[. Sterowanie zostanie przekazane do bloku ECVEJ tylko wtedy, gdy przewidywana sytuacja wyjątkowa rzeczywiście wystąpi. Przykładowy kod pokazany poni ej ilustruje praktyczne zastosowanie najprostszego, „pustego” obiektu-wyjątku przeznaczonego do obsługi typowej sytuacji konfliktowej — próby zapisania do macierzy elementu, dla którego nie ma przewidzianego miejsca (spoza dopuszczalnego zakresu indeksu-offsetu), co mo e w praktyce zagra ać przerwaniem pra- cy aplikacji i utratą danych. Listing 5.1 i rysunek 5.1 przedstawiają prosty przykład ob- sługi wyjątku. Listing 5.1. Obsługa wyjątku — ExHandle1.CPP KPENWFG KQUVTGCOJ EQPUV KPV GHCWNV5KG ENCUU CWQ ]_ FGHKPKELC MNCU[ FNC QDKGMVW Y[LCVMW ENCUU #TTC[ ] RTKXCVG KPV
  • 6. 2QKPVGT CPG RT[YCVPG
  • 7. Rozdział 5. Szablony i obsługa wyjątków 57 Rysunek 5.1. Obsługa sytuacji wyjątkowej w działaniu. Aplikacja konsoli Visual C++ o nazwie projektu ExHandle1 KPV TQOKCT YUMCPKM K TQOKCT OCEKGT[ RWDNKE #TTC[ KPV TQOKCT GHCWNV5KG YC MQPUVTWMVQT[ #TTC[ EQPUV #TTC[ /CEKGT `#TTC[ ] FGNGVG =? 2QKPVGT_ #TTC[ QRGTCVQT EQPUV #TTC[ 2TGEKCQPG QRGTCVQT[ KPV QRGTCVQT=? KPV QHH5GV EQPUV KPV QRGTCVQT=? KPV QHH5GV EQPUV KPV 2QFCL4QOKCT EQPUV ] TGVWTP TQOKCT _ Y[MNC OGVQFC HTKGPF QUVTGCO QRGTCVQT QUVTGCO EQPUV #TTC[ _ #TTC[#TTC[ KPV UKG TQOKCT UKG ] 2QKPVGT PGY KPV=UKG? HQT KPV K KUKG K 2QKPVGT=K? _ #TTC[ #TTC[QRGTCVQT EQPUV #TTC[ /CEKGT ] KH VJKU /CEKGT TGVWTP
  • 8. VJKU FGNGVG =? 2QKPVGT TQOKCT /CEKGT2QFCL4QOKCT 2QKPVGT PGY KPV=TQOKCT? HQT KPV K KTQOKCT K 2QKPVGT=K? /CEKGT=K? TGVWTP
  • 9. VJKU _ #TTC[#TTC[ EQPUV #TTC[ /CEKGT ] TQOKCT /CEKGT2QFCL4QOKCT 2QKPVGT PGY KPV=TQOKCT? HQT KPV K KTQOKCT K 2QKPVGT=K? /CEKGT=K? _ KPV #TTC[QRGTCVQT=? KPV QHH5GV ] KPV UKG 2QFCL4QOKCT KH QHH5GV QHH5GV 2QFCL4QOKCT TGVWTP 2QKPVGT=QHH5GV? GNUG ] VJTQY CWQ TWECP[ QDKGMV Y[LCVGM TGVWTP 2QKPVGT=QHH5GV? _
  • 10. 58 MS Visual C++. Ćwiczenia _ EQPUV KPV #TTC[QRGTCVQT=? KPV QHH5GV EQPUV ] KPV O[UKG 2QFCL4QOKCT KH QHH5GV QHH5GV 2QFCL4QOKCT TGVWTP 2QKPVGT=QHH5GV? VJTQY CWQ TGVWTP 2QKPVGT=QHH5GV? _ QUVTGCO QRGTCVQT QUVTGCO QWVRWV EQPUV #TTC[ VJG#TTC[ ] HQT KPV K KVJG#TTC[2QFCL4QOKCT K QWVRWV = K ? VJG#TTC[=K? GPFN TGVWTP QWVRWV _ KPV OCKP ] #TTC[ KPV#TTC[ VT[ ] HQT KPV L L L ] KPV#TTC[=L? L EQWV 7FCPG = L ? L GPFN _ _ ECVEJ CWQ 2TGEJY[EGPKG QDKGMVW Y[LCVMW ] EQWV 1$5.7)# 5;67#%,+ 9;,#6-19', P _ EQWV 2TQITCO OQG FKCNCE FCNGL GPFN EQWV FCNUG FKCNCPKG RTQITCOW GPFN TGVWTP _ To dobra okazja, by sprawdzić, jak na zakładce ClassView w panelu struktury projektu Visual C++ prezentowana jest hierarchia klas w przykładowej aplikacji (rysunek 5.2). Rysunek 5.2. Hierarchia klas na zakładce ClassView w panelu struktury Visual C++ Powy szy przykładowy prosty kod przy okazji demonstruje przecią anie operatorów przy u yciu metod oraz funkcji zewnętrznej kategorii friend.
  • 11. Rozdział 5. Szablony i obsługa wyjątków 59 Konstruowanie i stosowanie szablonów Szablony wymagają zastosowania słowa kluczowego C++ VGORNCVG. Szablony mo na stosować w odniesieniu do funkcji. Oto prosty przykład parametryzacji algorytmu sor- towania bąbelkowego przy u yciu szablonu VGORNCVG ENCUU 8 XQKF 8GEVQT$WDNG5QTV 8 YGMVQT=? KPV TQOKCT dla jednowymiarowej macierzy (wektora) stanowiącej argument funkcji sortującej. Listing 5.2. Konstrukcja i zastosowanie prostego szablonu: TemplateDemo1.CPP 6GRNCVGGOQ UCDNQP W[V[ PC NKUEKG CTIWOGPVÎY HWPMELK KPENWFG KQUVTGCOJ VGORNCVG ENCUU 8 XQKF 8GEVQT$WDNG5QTV 8 YGMVQT=? KPV TQOKCT ] HQT KPV K K TQOKCT K HQT KPV L TQOKCT KL L KH YGMVQT=L? YGMVQT=L? ] 8 V[OECUQYC YGMVQT=L? YGMVQT=L? YGMVQT=L? YGMVQT=L? V[OECUQYC _ _ OCKP ] KPV 0WOGTMK=? ] _ EJCT .KVGTMK=? ] F # V C _ 8GEVQT$WDNG5QTV 0WOGTMK UKGQH 0WOGTMKUKGQH 0WOGTMK=? 8GEVQT$WDNG5QTV .KVGTMK UKGQH .KVGTMKUKGQH .KVGTMK=? HQT KPV K KUKGQH 0WOGTMKUKGQH 0WOGTMK=? K EQWV 0WO= K ? 0WOGTMK=K? GPFN HQT K KUKGQH .KVGTMKUKGQH .KVGTMK=? K EQWV .KV= K ? .KVGTMK=K? GPFN TGVWTP _ Szablony zastosowane w odniesieniu do klas powodują utworzenie rodziny klas. Kom- pilator mo e następnie wygenerować samodzielnie nową klasę na podstawie zadanego szablonu. A oto prosty przykład kolejkowania z zastosowaniem szablonu wobec własnej klasy $7(14. Listing 5.3. Drugi szablon: TemplateDemo2.CPP KPENWFG KQUVTGCOJ EQPUV GHCWNV5KG VGORNCVG ENCUU - ENCUU $7(14 ]
  • 12. 60 MS Visual C++. Ćwiczenia RWDNKE $7(14 KPV 4QOKCT GHCWNV5KG ] .KEPKM 2QKPVGT PGY -=4QOKCT? _ `$7(14 ] FGNGVG =? 2QKPVGT _ XQKF Q$WHQTC - OKGPPC - $WHQTC RTQVGEVGF KPV .KEPKM -
  • 13. 2QKPVGT _ VGORNCVG ENCUU - XQKF $7(14- Q$WHQTC - UCDNQP ] 2QKPVGT=.KEPKM ? UCDNQP _ VGORNCVG ENCUU - - $7(14- $WHQTC XQKF ] TGVWTP 2QKPVGT=.KEPKM? _ OCKP ] $7(14KPV $ $Q$WHQTC $Q$WHQTC $Q$WHQTC EQWV $$WHQTC $$WHQTC $$WHQTC GPFN $7(14FQWDNG Q$WHQTC Q$WHQTC Q$WHQTC EQWV $WHQTC $WHQTC $WHQTC GPFN TGVWTP _ Przy okazji przykład ilustruje zastosowanie operatorów new i delete. Bufory tworzone z u yciem szablonu K mogą mieć ró ną wielkość i zawierać elementy ró nych typów. Ta „typologiczna” elastyczność powoduje, e szablony są często stosowane w praktyce do tworzenia klas i obiektów -pojemników (ang. container classes). Ćwiczenie 5.1. Stan wyjściowy: poprzedni projekt zamknięty. Aby przetestować działanie obsługi wyjątków, nale y wykonać kolejno wyszczególnione poni ej czynności. 1. Otwieramy nowy projekt aplikacji konsoli ExHandle1. 2. Wprowadzamy kod przykładu pierwszego do pliku ExHandle.CPP z listingu 5.1.
  • 14. Rozdział 5. Szablony i obsługa wyjątków 61 3. Uruchamiamy i sprawdzamy poprawność działania aplikacji. 4. Zamykamy projekt poleceniem File/Close Workspace. Ćwiczenie 5.2. Stan wyjściowy: poprzedni projekt zamknięty (stan wyjściowy IDE). Aby przetestować działanie obsługi szablonów, nale y wykonać kolejno wyszczególnio- ne poni ej czynności. 1. Otwieramy nowy projekt aplikacji konsoli TemplateDemo1. 2. Wprowadzamy kod przykładowy do pliku TemplateDemo1.CPP z listingu 5.2. 3. Uruchamiamy i sprawdzamy poprawność działania aplikacji (rysunek 5.3). Rysunek 5.3. Sortowanie z zastosowaniem szablonu class V 4. Zamykamy projekt poleceniem File/Close Workspace. Ćwiczenie 5.3. Stan wyjściowy: poprzedni projekt zamknięty (stan wyjściowy IDE). Aby przetestować działanie kolejnego (drugiego) wariantu obsługi szablonów, nale y wykonać kolejno wyszczególnione poni ej czynności. 1. Otwieramy nowy projekt aplikacji konsoli TemplateDemo2. 2. Wprowadzamy kod przykładowy do pliku TemplateDemo2.CPP z listingu 5.3. 3. Uruchamiamy i sprawdzamy poprawność działania aplikacji (rysunek 5.4). Rysunek 5.4. Bufor z zastosowaniem szablonów w działaniu 4. Zamykamy bie ący projekt poleceniem File/Close Workspace.
  • 15. 62 MS Visual C++. Ćwiczenia Podsumowanie W ćwiczeniach z tego rozdziału prześledziliśmy ogólne zasady konstrukcji kodów, działanie prostych aplikacji konsoli wykorzystujących obsługę sytuacji wyjątkowych za pomocą obiektów i proste szablony u yte w odniesieniu do funkcji i klas.