Programowanie wieloplatformowe z C++ i wxWidgets 3

1 opinia

Format:

pdf, ibuk

DODAJ DO ABONAMENTU

WYBIERZ RODZAJ DOSTĘPU

149,00

Format: pdf

 

Dostęp online przez myIBUK

WYBIERZ DŁUGOŚĆ DOSTĘPU

Cena początkowa:

Najniższa cena z 30 dni: 74,50 zł  


149,00

w tym VAT

TA KSIĄŻKA JEST W ABONAMENCIE

Już od 24,90 zł miesięcznie za 5 ebooków!

WYBIERZ SWÓJ ABONAMENT

Biblioteka wxWidgets jest potężnym, wieloplatformowym narzędziem, stworzonym do pisania aplikacji okienkowych, przeznaczonych dla wszystkich popularnych systemów operacyjnych. Jest wzbogacona o szereg narzędzi, umożliwiających realizację większości zadań i wymagań stawianych przed nowoczesnymi programami - w tym m.in. pełną obsługę współbieżności, obsługę protokołów sieciowych, czy też obsługę nowoczesnego OpenGL, choć to jedynie mała część jej możliwości. Co ważne, licencja wxWidgets pozwala na jej dowolne wykorzystanie w projektach każdego rodzaju, natomiast bogaty zestaw rozszerzeń znakomicie zwiększa zakres, w którym może być stosowana.
Biblioteka wxWidgets jest wykorzystywana między innymi przez NASA do tworzenia oprogramowania pracującego z teleskopami kosmicznymi, a także przez koncern zbrojeniowy Lockheed Martin, czy też firmę AMD. Z jej pomocą stworzono szereg popularnych aplikacji, takich jak FileZilla, CodeLite, czy RapidSVN, a także wiele innych.
Niniejsza książka to kompleksowy i wyjątkowy przewodnik po wxWidgets. To publikacja skierowana do wszystkich programistów C++ – także tych, którzy stawiają pierwsze kroki w świecie programowania GUI i programowania wieloplatformowego. Każdy kolejny rozdział wprowadza Czytelnika w coraz bardziej złożone i zaawansowane techniki wxWidgets, a zawarte w niej liczne przykłady kodu można uruchomić na większości popularnych platform systemowych. Możliwe będzie poznanie m.in. wyglądu struktury aplikacji wxWidgets oraz działanie i możliwość wykorzystania kluczowych typów wxWidgets takich jak wxString czy wxDateTime.
Dzięki lekturze Czytelnik nauczy się:
jak utworzyć pierwsze okno, wzbogacając je o pasek stanu i pasek menu oraz inne elementy i kontrolki GUI, pracować ze standardową i dynamiczną obsługą zdarzeń, pisać atrakcyjne programy, wykorzystywać standardowe okna dialogowe oraz pisać własne i kontrolować pozyskiwane przy ich pomocy dane wejściowe, pracować z plikami, czy formatem XML, przechowywać konfigurację programu, tworzyć aplikacje obsługujące różne języki, w jaki sposób napisać własny serwer oraz aplikację kliencką, stworzyć własnego klienta FTP, czy obsłużyć protokół HTTP, projektować oraz realizować własne kontrolki GUI, korzystać z innych zaawansowanych komponentów biblioteki, umożliwiających tworzenie nowoczesnych aplikacji komputerowych różnego typu.


Rok wydania2018
Liczba stron1112
KategoriaAplikacje, programy użytkowe
WydawcaWydawnictwo Naukowe PWN
ISBN-13978-83-01-19899-2
Numer wydania1
Język publikacjipolski
Informacja o sprzedawcyePWN sp. z o.o.

Ciekawe propozycje

Spis treści

  Od autora XXVII
    Podziękowania XXVIII
  Wprowadzenie XXIX
    Zakres tematyczny książki XXIX
    Ważna uwaga o konstrukcji książki, czyli zanim kupisz XXIX
    Dla kogo jest ta książka? XXXI
    Konwencje przyjęte w książce XXXI
    Warsztat XXXIII
      MS Windows XXXIII
        Microsoft Visual C++ XXXIII
        Code::Blocks XXXIII
      Inne XXXIV
        PoEdit XXXIV
        GIMP XXXIV
    Materiały dodatkowe do książki XXXIV
    Errata i aktualizacje XXXIV
    Notka prawna XXXV
  Część I Poznajemy wxWidgets 3 1
  1. Biblioteka 3
    1.1. Czym jest wxWidgets? 3
    1.2. Pobieranie i instalacja wxWidgets 4
      1.2.1. Konwencje numerowania wersji biblioteki 5
      1.2.2. Instalacja wxWidgets w systemach MS Windows 5
        1.2.2.1. Zmienna systemowa WXWIN 5
      1.2.3. Instalacja wxWidgets w systemach Ubuntu i Mint 6
        1.2.3.1. Ręczna instalacja biblioteki z archiwum tar 6
        1.2.3.2. Instalacja wxWidgets z pakietu Ubuntu/Debian 10
    1.3. Foldery i pliki wxWidgets 11
    1.4. Kompilacja wxWidgets 13
      1.4.1. Plik setup.h i standardowe parametry kompilacji 13
        1.4.1.1. Ustawienia globalne (global settings) 13
        1.4.1.2. Ustawienia kompatybilności wersji (compatibility settings) 14
        1.4.1.3. Ustawienia debugowania (debugging settings) 14
        1.4.1.4. Wsparcie standardu Unicode (Unicode support) 14
        1.4.1.5. Funkcje globalne (global features) 14
        1.4.1.6. Współpraca z biblioteką standardową (Interoperability with the standard library) 15
        1.4.1.7. Opcje niezwiązane z GUI (Non GUI features selection) 16
        1.4.1.8. Kontrolki GUI (Individual GUI controls) 20
        1.4.1.9. Różności GUI (Miscellaneous GUI Stuff) 23
        1.4.1.10. Okna dialogowe (common dialogs) 24
        1.4.1.11. Wsparcie metaplików (Metafiles support) 25
        1.4.1.12. Duże kontrolki GUI (Big GUI controls) 26
        1.4.1.13. Przetwarzanie danych (Data transfer) 26
        1.4.1.14. Ustawienia różne (Miscellaneous settings) 27
        1.4.1.15. Klasy wxDC (wxDC classes for various output formats) 27
        1.4.1.16. Wsparcie dla formatów graficznych (image format support) 28
        1.4.1.17. Inne opcje pliku setup.h 28
        1.4.1.18. Opcje zależne od platformy 29
      1.4.2. Kompilacja wxWidgets w systemach MS Windows 29
      1.4.3. Kompilacja wxWidgets w systemach Ubuntu Linux i Mint Linux 29
    1.5. Struktura biblioteki wxWidgets 29
    1.6. Słowo o konwencjach i stylu kodowania w wxWidgets 30
      1.6.1. Pliki 31
      1.6.2. Konwencje nazewnicze 31
      1.6.3. Styl kodowania 31
      1.6.4. Jakość kodu 32
      1.6.5. Ograniczenia C++ 32
      1.6.6. Inne 33
  2. Przygotowanie projektu 34
    2.1. Visual C++ (MS Windows) 34
      2.1.1. Utworzenie projektu 35
      2.1.2. Konfiguracja projektu 36
        2.1.2.1. Konfiguracja x86 (Win32) 37
        2.1.2.2. Konfiguracja x64 43
      2.1.3. Dodanie plików źródłowych 50
      2.1.4. Zapisanie szablonu projektu 50
    2.2. Code::Blocks (Ubuntu i Mint) 52
      2.2.1. Utworzenie projektu 52
      2.2.2. Konfiguracja projektu 54
        2.2.2.1. Ogólne opcje projektu 54
        2.2.2.2. Opcje kompilacji i konsolidacji 55
      2.2.3. Dodanie plików źródłowych 56
      2.2.4. Zapisanie szablonu projektu 58
      2.2.5. Rozwiązywanie problemów z kodowaniem plików 58
      2.2.6. Rozwiązywanie problemów z wieloma wersjami wxWidgets 58
        2.2.6.1. Wybór wersji wxWidgets za pomocą wx-config 58
        2.2.6.2. Wybór wersji wxWidgets za pomocą własnego pliku Makefile 59
    2.3. O projektach Code::Blocks i wxWidgets w systemach MS Windows 61
    2.4. Podsumowanie 62
  3. Pierwsze okno 63
    3.1. Ogólna struktura aplikacji 63
    3.2. Szczegóły głównego okna programu 66
      3.2.1. Modyfikowanie konstruktora 68
    3.3. Pasek stanu 69
      3.3.1. Funkcja CreateStatusBar() 69
      3.3.2. Więcej opcji paska stanu 70
        3.3.2.1. Modyfikacja rozmiarów pól paska stanu 70
        3.3.2.2. Modyfikacja liczby pól paska stanu 72
      3.3.3. Zaawansowane tworzenie paska stanu 72
    3.4. Pasek menu 73
      3.4.1. Realizacja paska menu 73
      3.4.2. Sprytne odmiany funkcji Append() 76
      3.4.3. Skróty klawiaturowe menu 78
      3.4.4. Dygresja graficzna, czyli słowo o ikonach w menu 79
      3.4.5. Co dalej? 79
  4. Obsługa zdarzeń 80
    4.1. Wprowadzenie do obsługi zdarzeń 80
      4.1.1. Identyfikatory 80
      4.1.2. Funkcje akcji programu 81
      4.1.3. Tablica zdarzeń 83
      4.1.4. Uzupełniamy program modelowy 84
    4.2. Wokół pętli zdarzeń... 86
    4.3. Niektóre metody klasy wxCommandEvent 88
    4.4. Rozpoznawanie inicjatora zdarzenia za pomocą funkcji GetId() 90
      4.4.1. Składanie zdarzeń 90
      4.4.2. Zakresowe makra obsługi zdarzeń 91
    4.5. Dynamiczna obsługa zdarzeń 92
      4.5.1. Odrobina klasyki, czyli funkcje Connect() i Disconnect() 92
      4.5.2. Z duchem czasu, czyli funkcje Bind() i Unbind() 94
      4.5.3. Standard C++11 i obsługa zdarzeń wxWidgets 96
    4.6. Wbudowane identyfikatory wxWidgets 97
      4.6.1. Wbudowane identyfikatory wxWidgets i odkrywanie tajemnic menu 98
    4.7. Wyjątkowe zdarzenie wxEVT_CLOSE_WINDOW 99
      4.7.1. Realizacja pytania o wyjście z programu 99
    4.8. Zdarzenia myszy i klawiatury 100
      4.8.1. Obsługa zdarzeń myszy 100
      4.8.2. Obsługa zdarzeń klawiatury 103
        4.8.2.1. Problem globalnej obsługi zdarzeń klawiatury 106
    4.9. Inne rodzaje zdarzeń 108
    4.10. Pisanie własnych zdarzeń 110
      4.10.1. Kiedy i gdzie stosować własne zdarzenia? 110
      4.10.2. Realizacja własnych zdarzeń 111
        4.10.2.1. Podstawowa realizacja własnych zdarzeń 111
        4.10.2.2. Zaawansowana realizacja własnych zdarzeń 112
  5. Zanim przejdziemy dalej... 116
    5.1. Kod aplikacji wxWidgets w różnych plikach 116
    5.2. Podobieństwo konstruktorów i metod, czyli słowo o tym, jak łatwo i szybko opanować wxWidgets 116
    5.3. Konstruktor czy Create()? 119
  Część II Zdobywamy obszar klienta 121
  6. Wisielec, czyli podstawowe kontrolki i techniki wxWidgets 123
    6.1. Koncepcja programu 124
    6.2. Kilka uwag o menu Wisielca 125
    6.3. Klasa wxPanel – podstawowy kontener GUI 126
    6.4. Grafika w programie: wxBitmap, wxImage i wxIcon 127
      6.4.1. Procedury obsługi grafiki 127
      6.4.2. Klasa wxBitmap 128
        6.4.2.1. Tworzenie bitmapy i inicjowanie jej danymi 129
        6.4.2.2. Tajemniczy format XPM 130
        6.4.2.3. Obiekty wxBitmap i grafika wbudowana 131
        6.4.2.4. Operacje na wxBitmap 133
      6.4.3. Klasa wxImage 135
        6.4.3.1. Tworzenie obiektów wxImage 135
        6.4.3.2. Operacje na wxImage 136
        6.4.3.3. Przekształcanie bitmapy wxBitmap za pomocą wxImage 137
      6.4.4. Klasa wxIcon 138
    6.5. Lokalizacja plików aplikacji w różnych systemach operacyjnych 139
        6.5.4.1. Pomocne funkcje narzędziowe i plik utils.h 142
    6.6. Ustawiamy ikonę programu 143
    6.7. Pasek narzędzi wxToolBar 144
      6.7.1. Realizacja paska narzędzi 144
      6.7.2. Zarządzanie paskiem narzędzi 148
      6.7.3. Menu w pasku narzędzi 150
      6.7.4. Kontrolki w pasku narzędzi 151
    6.8. Statyczne elementy GUI 153
      6.8.1. Klasa wxStaticText 153
      6.8.2. Klasa wxStaticBitmap 154
      6.8.3. Klasa wxStaticLine 155
      6.8.4. Klasa wxStaticBox 155
    6.9. Wprowadzenie do programowania GUI opartego na relacjach 156
      6.9.1. Czym są sizery? 157
      6.9.2. Klasa wxBoxSizer 157
      6.9.3. Klasa wxStaticBoxSizer 159
      6.9.4. Analiza przypadków 159
        6.9.4.1. Przypadek 1 – prosty sizer liniowy 159
        6.9.4.2. Przypadek 2 – klasyczne okno dialogowe 162
        6.9.4.3. Przypadek 3 – koncepcja GUI Wisielca 163
      6.9.5. Składamy szkielet GUI Wisielca 165
    6.10. Czcionki i kolory w wxWidgets 169
      6.10.1. Klasa wxFont 169
        6.10.1.1. Modyfikacja utworzonych czcionek 171
        6.10.1.2. Użycie czcionek wxFont 172
        6.10.1.3. Ustawiamy czcionki Wisielca 173
      6.10.2. Klasa wxColour, baza kolorów i inne kolorowe ciekawostki 173
        6.10.2.1. Przetwarzanie danych koloru 176
        6.10.2.2. Słowo o kolorach z wxStockGDI 177
        6.10.2.3. Kolory systemowe 178
        6.10.2.4. Użycie kolorów wxWidgets 179
        6.10.2.5. Ustawiamy kolory GUI Wisielca 180
    6.11. Wstęp do podstawowych kontrolek dynamicznych 181
      6.11.1. Okno tekstowe wxTextCtrl 182
        6.11.1.1. Tworzymy kontrolkę tekstową wxTextCtrl 182
        6.11.1.2. Ważniejsze metody klasy wxTextCtrl 184
        6.11.1.3. Zdarzenia klasy wxTextCtrl i ich obsługa 187
      6.11.2. Świat przycisków wxWidgets 189
        6.11.2.1. Klasa wxButton 189
        6.11.2.2. Klasa wxToggleButton 191
        6.11.2.3. Klasa wxBitmapButton 192
      6.11.3. Lista rozwijana wxComboBox 192
        6.11.3.1. Klasa wxArrayString 193
        6.11.3.2. Realizacja listy rozwijanej 194
        6.11.3.3. Niektóre metody klasy wxComboBox 195
        6.11.3.4. Obsługa zdarzeń listy rozwijanej 196
      6.11.4. Kontrolki numeryczne wxSpinCtrl i wxSpinCtrlDouble 197
        6.11.4.1. Klasa wxSpinCtrl 197
        6.11.4.2. Klasa wxSpinCtrlDouble 198
        6.11.4.3. Style kontrolek numerycznych 199
        6.11.4.4. Ważniejsze metody kontrolek numerycznych 199
        6.11.4.5. O zdarzeniach kontrolek numerycznych 200
    6.12. Inne kontrolki wxWidgets 201
      6.12.1. Jak korzystać z dokumentacji klas wxWidgets 202
    6.13. Kompletujemy GUI Wisielca 203
      6.13.1. Log 203
      6.13.2. Ustawienia 205
    6.14. Rysowanie szubienicy, czyli tajemnice klasy wxDC 207
      6.14.1. Dostępne konteksty urządzeń 207
      6.14.2. Rysowanie z wxDC w praktyce 208
        6.14.2.1. Pióro i pędzel 208
        6.14.2.2. Metody rysujące 210
      6.14.3. Pierwsze rysunki 214
        6.14.3.1. Rysowanie w obszarze klienta (wxClientDC) 214
        6.14.3.2. Rysowanie za pomocą myszy 218
      6.14.4. Znaczenie zdarzenia wxEVT_PAINT i wieloplatformowość 219
        6.14.4.1. Uniwersalny wieloplatformowy blok rysunkowy 220
      6.14.5. Piszemy funkcję rysującą szubienicę 221
    6.15. Wykończyć Wisielca! 224
      6.15.1. Założenia 224
      6.15.2. Niezbędne zmienne i funkcje 225
      6.15.3. Wprowadzanie odgadywanych liter z klawiatury 226
      6.15.4. Obsługa logu 227
      6.15.5. Mierzenie czasu 228
      6.15.6. Ustawienie stanu początkowego gry 229
      6.15.7. Funkcja wyświetlająca hasło 230
      6.15.8. Rozpoczęcie gry 230
      6.15.9. Przebieg rozgrywki 232
      6.15.10. Zakończenie gry 236
      6.15.11. Przerwanie gry 237
    6.16. Podsumowanie 238
  7. Własny edytor C++, czyli bardziej zaawansowane kontrolki i techniki wxWidgets 239
    7.1. Koncepcja programu 240
    7.2. Przygotowanie szkieletu aplikacji 241
      7.2.1. Tworzymy główne okno 241
      7.2.2. Realizujemy pasek menu z ikonami 242
      7.2.3. Pasek narzędzi 247
      7.2.4. Domykamy szkielet aplikacji 248
      7.2.5. Zanim rozpoczniemy pracę nad GUI edytora 251
    7.3. Kontener wxSplitterWindow 251
      7.3.1. Wstawiamy kontener do programu 253
      7.3.2. Wstawiamy kontener prawej kolumny 255
      7.3.3. Pozostałe ważniejsze metody klasy wxSplitterWindow, o których warto wiedzieć 255
      7.3.4. Obsługa zdarzeń kontenera wxSplitterWindow 257
      7.3.5. Edytor C++ – przygotowanie sizerów obszarów GUI 258
      7.3.6. Multi Document Interface (MDI) i wxAUI, czyli inne podejście do organizacji GUI 258
    7.4. Drzewo projektu, czyli klasa wxTreeCtrl 259
      7.4.1. Jak działa drzewo wxTreeCtrl? 260
      7.4.2. Trochę teorii o drzewach wxTreeCtrl 260
      7.4.3. Obsługa zdarzeń klasy wxTreeCtrl 262
      7.4.4. Ikony drzewa i lista wxImageList 262
      7.4.5. Operacje drzewa wxTreeCtrl 265
        7.4.5.1. Dodawanie, wstawianie i usuwanie elementów drzewa 265
        7.4.5.2. Modyfikowanie widoku drzewa 267
        7.4.5.3. Zarządzanie drzewem i jego elementami 268
      7.4.6. Tworzymy drzewo plików projektu edytora C++ 279
        7.4.6.1. Przygotowanie struktury danych plików projektu C++ 279
        7.4.6.2. A co z plikami spoza projektu? 281
        7.4.6.3. Klasa drzewa projektu, czyli ProjectTreeCtrl 282
        7.4.6.4. Wyszukiwanie plików projektu w drzewie 283
        7.4.6.5. Wyszukiwanie innych elementów drzewa 285
        7.4.6.6. Wstawianie elementów do drzewa 286
        7.4.6.7. Inne przydatne metody 287
        7.4.6.8. Co dalej z drzewem projektu? 287
    7.5. Tworzymy plik projektu, czyli praca z biblioteką wxXML 288
      7.5.1. Błyskawiczne wprowadzenie do języka XML 288
      7.5.2. Struktura XML pliku projektu 289
      7.5.3. Poznajemy bibliotekę składową wxXML i jej klasy 291
        7.5.3.1. Klasa wxXmlDocument 291
        7.5.3.2. Klasa wxXmlNode i znaczniki XML 293
        7.5.3.3. Techniki definiowania znaczników XML z użyciem wxXmlNode 295
        7.5.3.4. Przegląd niektórych przydatnych metod klasy wxXmlNode 298
        7.5.3.5. Odczyt, przetwarzanie i zapis pliku XML 299
        7.5.3.6. Usprawniamy pracę, czyli własna klasa dokumentu XML 305
      7.5.4. Realizacja pliku projektu i jego obsługi w edytorze C++ 310
        7.5.4.1. Okno wyjścia konsoli 310
        7.5.4.2. Drzewo i jego ikony 311
        7.5.4.3. Tworzenie nowego pliku projektu 312
        7.5.4.4. Otwieranie istniejącego pliku projektu 319
        7.5.4.5. Dodawanie plików do projektu 324
        7.5.4.6. Zmiana nazwy pliku w projekcie 329
        7.5.4.7. Usuwanie plików z projektu 331
        7.5.4.8. A co z pozostałymi operacjami na plikach? 332
        7.5.4.9. Temat nadobowiązkowy – menu kontekstowe dla plików w drzewie projektu 333
    7.6. wxBookCtrlBase i klasy kontenerów pochodnych 334
      7.6.1. Klasa wxBookCtrlBase 334
      7.6.2. Klasa zdarzeń wxBookCtrlEvent 336
      7.6.3. Przegląd kontenerów opartych na klasie wxBookCtrlBase 337
        7.6.3.1. Klasa wxNotebook 337
        7.6.3.2. Klasa wxChoicebook 339
        7.6.3.3. Klasa wxListbook 340
        7.6.3.4. Pozostałe kontenery wxBookCtrl 341
        7.6.3.5. Sposoby korzystania z kontenerów wxBookCtrl 342
        7.6.3.6. Utrudnienia w korzystaniu z kontenerów wxBookCtrl wraz z elementami języka C++11 i nowszych 347
        7.6.3.7. Dodajemy kontener do edytora C++ 347
    7.7. Serce edytora, czyli klasa wxStyledTextCtrl 348
      7.7.1. Przygotowanie biblioteki wxSTC 349
      7.7.2. Tworzenie kontrolki edytora wxStyledTextCtrl i jej konfiguracja 349
        7.7.2.1. Podstawowy konstruktor klasy wxStyledTextCtrl 349
        7.7.2.2. Podstawowa konfiguracja kontrolki wxStyledTextCtrl 350
      7.7.3. Zdarzenia klasy wxStyledTextCtrl i ich obsługa 355
      7.7.4. Przegląd istotnych możliwości klasy wxStyledTextCtrl 358
        7.7.4.1. Słowo o metodach reimplementowanych z wxTextEntry i innych metodach związanych z edycją 358
        7.7.4.2. Składanie kodu (code folding) 361
        7.7.4.3. Autouzupełnianie kodu (code autocompletion) 367
        7.7.4.4. Notatki i komunikaty w kodzie 373
        7.7.4.5. Podświetlanie pasujących nawiasów 378
      7.7.5. Wnioski 381
    7.8. Ten moment, gdy serce zaczyna bić… 381
      7.8.1. Otwieranie plików w edytorze 382
        7.8.1.1. Przygotowania 382
        7.8.1.2. Funkcja obsługująca składanie kodu 386
        7.8.1.3. Funkcja otwierająca dokumenty w nowych oknach edytora 386
        7.8.1.4. Wyświetlanie pliku dodawanego do projektu 387
        7.8.1.5. Wyświetlanie pliku aktywowanego w drzewie projektu 388
        7.8.1.6. Wyświetlanie pliku spoza projektu 390
      7.8.2. Działania związane z edycją plików 390
        7.8.2.1. Wykrywanie edycji i zmiana ikony pliku 390
        7.8.2.2. Metody edycyjne 391
      7.8.3. Wyszukiwanie i zamiana ciągów znaków 392
        7.8.3.1. Wyświetlenie okna dialogowego wyszukiwania i zamiany ciągów znaków 393
        7.8.3.2. Metoda wyszukująca 394
        7.8.3.3. Realizacja wyszukiwania ciągów znaków 396
        7.8.3.4. Realizacja zamiany ciągów znaków 398
        7.8.3.5. Właściwe zamykanie okna dialogowego zamiany 399
      7.8.4. Zapis i zamykanie dokumentów 400
        7.8.4.1. Ogólne metody zapisujące 400
        7.8.4.2. Zapis na życzenie użytkownika 402
        7.8.4.3. Zamykanie plików aktywnego projektu 403
        7.8.4.4. Zamykanie aplikacji a kontrola niezapisanych plików 404
      7.8.5. Ostatnie uzupełnienia 404
      7.8.6. Wnioski 405
    7.9. Zgłębiamy tajemnice listy wxListCtrl 406
      7.9.1. Tworzenie listy wxListCtrl i tryby jej pracy 407
        7.9.1.1. Pozostałe style klasy wxListCtrl 408
        7.9.1.2. Ikony listy 408
        7.9.1.3. Elementy listy, czyli klasa wxListItem 409
      7.9.2. Obsługa zdarzeń klasy wxListCtrl 411
      7.9.3. Ważniejsze metody klasy wxListCtrl 412
        7.9.3.1. Zarządzanie elementami listy 412
        7.9.3.2. Dane powiązane z elementem listy 414
        7.9.3.3. Korzystanie z przełączników typu checkbox w obrębie listy 415
        7.9.3.4. Praca z listą w trybie szczegółowym 416
        7.9.3.5. Testowanie elementów listy (na przykładzie listy szczegółowej) 419
        7.9.3.6. Szersze spojrzenie na atrybuty elementów listy wxListCtrl i klasa wxListItemAttr 420
      7.9.4. Zaawansowane zabawy z listą wxListCtrl 420
        7.9.4.1. Przemieszczanie wierszy listy w trybie szczegółowym 421
        7.9.4.2. Sortowanie listy wxListCtrl 425
        7.9.4.3. wxListCtrl jako lista rozwijana kontrolek typu ‘combobox’ 432
      7.9.5. Inne klasy list dostępnych w wxWidgets 436
      7.9.6. Tworzymy listę statystyk plików programu wxC++ 440
        7.9.6.1. Tworzenie listy statystyki 441
        7.9.6.2. Aktualizacja danych listy statystyk 441
    7.10. Przełącznik wxCheckBox 443
      7.10.1. Tworzenie i tryby pracy przełączników wxCheckBox 444
        7.10.1.1. Style i obsługa zdarzeń klasy wxCheckBox 444
        7.10.1.2. Ważniejsze metody klasy wxCheckBox 444
      7.10.2. Korzystanie z przełącznika wxCheckBox (na przykładzie aplikacji wxC++) 445
    7.11. Szybkie wprowadzenie do drukowania w wxWidgets 446
      7.11.1. Klasa wxHtmlEasyPrinting i inicjowanie środowiska drukowania 447
      7.11.2. Konfiguracja wydruku 448
      7.11.3. Przygotowanie tekstu do drukowania 449
      7.11.4. Wydruk, podgląd wydruku oraz ustawienia strony 450
      7.11.5. Littera scripta manet 452
    7.12. Pozostałe uzupełnienia i funkcje programu wxC++ 452
      7.12.1. Implementacja trybu pełnoekranowego 452
      7.12.2. Prosty kreator klas C++ 453
    7.13. Aplikacja wxC++ – zakończenie 454
      7.13.1. Propozycje udoskonaleń programu 455
  8. Level completed, czyli co jeszcze w trawie piszczy? 459
  Część III Potęga dialogu 463
  9. Standardowe okna i funkcje dialogowe oraz inne techniki interakcji z użytkownikiem 465
    9.1. Okna dialogowe związane z pobieraniem danych od użytkownika 466
      9.1.1. Pobieranie tekstu 467
        9.1.1.1. Pobieranie zwykłego tekstu 467
        9.1.1.2. Pobieranie hasła (tekstu ukrytego) 468
        9.1.1.3. Ograniczenia funkcji wxGetTextFromUser() i wxGetPasswordFromUser 468
        9.1.1.4. Klasa wxTextEntryDialog 468
        9.1.1.5. Klasa wxPasswordEntryDialog 470
      9.1.2. Pobieranie wartości numerycznych 470
    9.2. Okna dialogowe związane z pobieraniem wyborów użytkownika 471
      9.2.1. Wybór kroju czcionki 471
        9.2.1.1. Klasa wxFontDialog 473
      9.2.2. Wybór znaku 474
      9.2.3. Wybór koloru 476
        9.2.3.1. Klasa wxColourDialog 477
      9.2.4. Wybór jednej lub wielu opcji 478
        9.2.4.1. Funkcje dialogowe wyboru pojedynczego 478
        9.2.4.2. Sprytne funkcje wyboru pojedynczego 481
        9.2.4.3. Klasa wxSingleChoiceDialog 482
        9.2.4.4. Funkcje dialogowe wyboru wielokrotnego 484
        9.2.4.5. Klasa wxMultiChoiceDialog 485
      9.2.5. Definiowanie szyku danych 486
        9.2.5.1. Klasa wxRearrangeDialog 486
        9.2.5.2. Klasach wxRearrangeCtrl i wxRearrangeList 488
    9.3. Okna dialogowe systemu plików 488
      9.3.1. Okna dialogowe do pracy z katalogami 489
        9.3.1.1. Klasa wxDirDialog 489
      9.3.2. Okna dialogowe do pracy z plikami 490
        9.3.2.1. Tryby pracy dialogów plikowych 490
        9.3.2.2. Funkcje dialogowe do pracy z plikami 491
        9.3.2.3. Klasa wxFileDialog 494
    9.4. Informacyjne okna dialogowe 498
      9.4.1. Podstawowe okna informacyjne 498
        9.4.1.1. Klasa wxMessageDialog 498
        9.4.1.2. Funkcja wxMessageBox() 502
        9.4.1.3. Funkcja wxInfoMessageBox() 502
      9.4.2. Paski komunikatów 503
      9.4.3. Okna informacji o programie 505
        9.4.3.1. Funkcja wxAboutBox() i klasa wxAboutDialogInfo 505
      9.4.4. Okno komunikatów diagnostycznych, czyli klasa wxLogGui 507
      9.4.5. Okna dialogowe i techniki wizualizacji postępu 509
        9.4.5.1. Klasy wxGenericProgressDialog i wxProgressDialog 509
        9.4.5.2. Klasa wxAppProgressIndicator 512
      9.4.6. Okna dialogowe i techniki wizualizowania zajętości 513
        9.4.6.1. Wizualizacja zajętości przez wygląd kursora 513
        9.4.6.2. Klasa wxBusyInfo 514
      9.4.7. Powiadomienia 516
        9.4.7.1. Klasa wxNotificationMessage 516
        9.4.7.2. Metoda wxTopLevelWindow::RequestUserAttention() 519
      9.4.8. Okna dialogowe związane z systemem pomocy i wsparciem 520
        9.4.8.1. Porada dnia 520
        9.4.8.2. Rozszerzone podpowiedzi 522
        9.4.8.3. Okno dialogowe pomocy HTML 523
    9.5. Pozostałe okna dialogowe 527
      9.5.1. Arkusze właściwości 527
      9.5.2. Okno dialogowe wyszukiwania i zamiany ciągu znaków 530
      9.5.3. Okno dialogowe konfiguracji drukowania 531
      9.5.4. Kreator wxWizard 533
    9.6. Kontrolki pochodne od wxPickerBase 538
      9.6.1. Klasa wxColourPickerCtrl 538
      9.6.2. Klasa wxFontPickerCtrl 540
      9.6.3. Klasy wxDirPickerCtrl i wxFilePickerCtrl 541
      9.6.4. Przegląd ważniejszych wspólnych metod klas dziedziczących z wxPickerBase 544
    9.7. Podsumowanie i słowo o dialogowych kontrolkach GUI 544
  10. Walidacja danych wejściowych 545
    10.1. Aplikacja przykładowa i funkcja testująca 545
    10.2. Pasywne testy danych wejściowych 546
      10.2.1. Kontrola pasywna danych wejściowych kontrolki GUI 547
      10.2.2. Kontrola pasywna danych wejściowych w oknach dialogowych 547
    10.3. Aktywne testy danych wejściowych 548
      10.3.1. Kontrola aktywna danych wejściowych kontrolki GUI 548
      10.3.2. Kontrola aktywna danych wejściowych w oknach dialogowych 549
    10.4. Praca z walidatorami wxWidgets 551
      10.4.1. Klasa wxValidator 552
      10.4.2. Walidator tekstowy wxTextValidator 553
      10.4.3. Walidatory numeryczne wxIntegerValidator oraz wxFloatingPointValidator 555
      10.4.4. Walidator generyczny wxGenericValidator 557
      10.4.5. Walidacja wyrażeń regularnych 558
      10.4.6. Własny walidator uniwersalny 563
      10.4.7. Nieco więcej o transferze danych 568
    10.5. Podsumowanie rozdziału, czyli jakiej metody walidacji użyć? 568
  11. Aplikacja Bibliotekarz i realizacja własnych okien dialogowych 570
    11.1. Klasa wxDialog i jej cechy 570
      11.1.1. Tworzenie własnych klas okien dialogowych opartych na klasie wxDialog 571
      11.1.2. Zdarzenia okna dialogowego wxDialog 572
      11.1.3. Sposoby wyświetlania okien dialogowych wxDialog 572
        11.1.3.1. C++11 i nowe możliwości wyświetlania okien dialogowych 574
        11.1.3.2. Pozostałe metody związane z wyświetlaniem okna dialogowego 574
      11.1.4. Metody ułatwiające tworzenie GUI okien dialogowych opartych na klasie wxDialog 575
        11.1.4.1. Tworzenie obszaru przycisków 575
        11.1.4.2. Usprawnianie tworzenia pozostałych obszarów GUI 576
      11.1.5. Adaptacja dużych obszarów zawartości 576
      11.1.6. Pozostałe ważniejsze metody klasy wxDialog 579
    11.2. Przygotowanie aplikacji Bibliotekarz 579
      11.2.1. Główne założenia i przygotowanie do pracy nad programem 579
        11.2.1.1. Przygotowanie trzonu aplikacji 580
        11.2.1.2. Implementacja prostego systemu przechowywania konfiguracji programu 582
      11.2.2. Klasa biblioteki 586
        11.2.2.1. Dodanie biblioteki do programu 594
    11.3. Piszemy pierwsze okno dialogowe 595
      11.3.1. Zanim zaczniemy 596
        11.3.1.1. Horyzontalny sizer z etykietą 596
      11.3.2. Tworzymy klasę własnego okna dialogowego 597
      11.3.3. Piszemy konstruktor klasy BookDialog 599
      11.3.4. Pozostałe metody klasy BookDialog 604
      11.3.5. Korzystanie z okna dialogowego w programie 606
        11.3.5.1. Usuwanie książki z biblioteki 608
      11.3.6. Wnioski 609
    11.4. Współdziałanie własnych okien dialogowych z własnymi walidatorami 609
      11.4.1. Klasa LendBookDialog 609
      11.4.2. Implementacja wypożyczania i oddawania książki 611
    11.5. Okna dialogowe oparte na klasie wxFrame 612
      11.5.1. Klasa MailConfigDialog 612
      11.5.2. Implementacja mechanizmu modalnego wyświetlania okna 615
      11.5.3. Obsługa standardowych przycisków 617
      11.5.4. Zastosowanie klasy MailConfigDialog w programie 618
      11.5.5. Wnioski 619
    11.6. Ostatnie podejście do pisania własnych okien dialogowych i zmiana zwracanego kodu 619
      11.6.1. Klasa SMTPConfigDialog 619
      11.6.2. Włączenie okna konfiguracji SMTP do aplikacji 622
    11.7. Kończymy aplikację Bibliotekarz 622
      11.7.1. Wybór między wxSocketBase, wxEMail a biblioteką POCO 622
      11.7.2. Pobieranie i kompilacja biblioteki POCO 623
        11.7.2.1. Kompilacja biblioteki POCO w MS Windows 623
        11.7.2.2. Kompilacja i instalacja biblioteki POCO w Linux 625
        11.7.2.3. Wersja binarna bibliotek dla MS Windows 625
      11.7.3. Dodanie biblioteki POCO do projektu 625
        11.7.3.1. MS Windows (Visual Studio) 625
        11.7.3.2. Linux (Code::Blocks) 626
        11.7.3.3. Pliki nagłówkowe 627
      11.7.4. Wysyłanie wiadomości e-mail za pomocą biblioteki POCO 627
    11.8. Podsumowanie i propozycje udoskonalenia aplikacji 631
  Część IV Zaawansowane programowanie wxWidgets 633
  12. Tajemnice pracy z ciągami znaków w wxWidgets, czyli klasa wxString i nie tylko... 635
    12.1. Klasa wxString i jej stosowanie 635
      12.1.1. Tworzenie obiektów wxString 636
      12.1.2. Konkatenacja ciągów wxString 638
        12.1.2.1. Operatory konkatenacji 638
        12.1.2.2. Funkcje wstawiające 638
      12.1.3. Dostęp do elementów łańcucha wxString 639
        12.1.3.1. Metody dostępu 639
        12.1.3.2. Dostęp przez iteratory 639
      12.1.4. Konwersja wxString do innych typów i odwrotnie 640
        12.1.4.1. Konwersje między wxString a standardowymi typami tekstowymi oraz literałami łańcuchowymi 640
        12.1.4.2. Kodowanie znaków w konwersji ciągów znaków 642
        12.1.4.3. Konwersje między wxString a typami liczbowymi 644
      12.1.5. Testowanie ciągów wxString 646
      12.1.6. Przetwarzanie i edycja ciągów wxString 647
        12.1.6.1. Wyszukiwanie, zwracanie oraz zamiana ciągów znaków oraz ich fragmentów 647
        12.1.6.2. Zmiana wielkości znaków 649
        12.1.6.3. Usuwanie ciągu znaków i jego części 649
        12.1.6.4. Dzielenie ciągów wxString 650
      12.1.7. wxString i łańcuchy formatowane 652
        12.1.7.1. Formatowane inicjowanie obiektu wxString 652
        12.1.7.2. Formatowane wyjście wxString 652
        12.1.7.3. Ciągi wxString w standardowych funkcjach formatujących 653
      12.1.8. Makra wxT(), _T(), wxT_2(), wxS() oraz _() 653
      12.1.9. wxString i metody STL 653
    12.2. Wyrażenia regularne, czyli klasa wxRegEx 654
      12.2.1. Testowanie łańcuchów znaków 655
      12.2.2. Zmiana ciągów znaków za pomocą wyrażenia regularnego 655
    12.3. Gromadzenie ciągów znaków, czyli klasa wxArrayString 656
      12.3.1. Tworzenie tablic ciągów znaków i zarządzanie ich elementami 656
      12.3.2. Tablice wxArrayString a STL 657
      12.3.3. Testowanie tablic wxArrayString 658
      12.3.4. Tablice wxArrayString a zarządzanie pamięcią 658
      12.3.5. Sortowanie tablic wxArrayString 659
    12.4. Klasa wxSortedArrayString 660
    12.5. Podsumowanie 661
  13. Data i czas w wxWidgets 662
    13.1. Klasa wxDateTime i jej stosowanie 662
      13.1.1. Tworzenie i inicjowanie obiektów wxDateTime 662
      13.1.2. Dostęp do danych daty i czasu 665
      13.1.3. Porównywanie wartości dat i czasu 666
      13.1.4. Arytmetyka dat i czasu, czyli klasy wxDateSpan oraz wxTimeSpan 668
        13.1.4.1. Klasa wxDateSpan i jej właściwości 668
        13.1.4.2. Klasa wxTimeSpan i jej właściwości 670
        13.1.4.3. Wykonywanie działań na obiektach wxDateTime 673
      13.1.5. Parsowanie i formatowanie daty i czasu 677
        13.1.5.1. Formatowanie obiektów daty i czasu do łańcuchów znaków 677
        13.1.5.2. Własne formatowanie daty i czasu 678
        13.1.5.3. Wyświetlanie tekstowych informacji o okresach 686
        13.1.5.4. Parsowanie łańcuchów znaków do obiektów daty i czasu 688
      13.1.6. Strefy czasowe i tzw. czas letni 690
      13.1.7. Pozostałe przydatne metody wxDateTime 692
        13.1.7.1. Aktualny czas i aktualna data 692
        13.1.7.2. Funkcje kalendarzowe 693
    13.2. Pobieranie daty i czasu od użytkownika 693
      13.2.1. Prezentacja klas wxCalendarCtrl oraz wxGenericCalendarCtrl 693
        13.2.1.1. Zdarzenia klas wxCalendarCtrl oraz wxGenericCalendarCtrl i ich obsługa 695
        13.2.1.2. Modyfikacja wyglądu kalendarza generycznego 695
        13.2.1.3. Święta i ich definiowanie 695
        13.2.1.4. Atrybuty dat kalendarza generycznego 696
        13.2.1.5. Inne przydatne metody klas wxCalendarCtrl i wxGenericCalendarCtrl 697
        13.2.1.6. Którą kontrolkę kalendarza wybrać? 698
        13.2.1.7. Przykład zastosowania i porównanie kontrolek wxCalendarCtrl i wxGenericCalendarCtrl w praktyce 698
      13.2.2. Prezentacja klasy wxDatePickerCtrl 700
        13.2.2.1. Przykład stosowania kontrolek wxDatePickerCtrl 701
      13.2.3. Prezentacja klasy wxTimePickerCtrl 701
        13.2.3.1. Przykład stosowania kontrolek wxTimePickerCtrl 702
    13.3. Podsumowanie 703
  14. Krótka opowieść o przydatnych szablonach i pseudoszablonach wxWidgets 704
    14.1. Klasy pojemnikowe 704
      14.1.1. Kontener podstawowy, czyli klasa wxVector 704
      14.1.2. Stos, czyli klasa wxStack 705
      14.1.3. Lista łączona, czyli klasy wxList i wxNode 706
      14.1.4. Kontener asocjacyjny wxHashMap 709
      14.1.5. Tablice wxWidgets, czyli klasa wxArray i jej odmiany 711
    14.2. Sprytne wskaźniki 714
      14.2.1. wxSharedPtr 714
      14.2.2. wxScopedPtr 715
      14.2.3. Klasa wxScopedTiedPtr 716
      14.2.4. wxScopedArray 716
      14.2.5. wxObjectDataPtr 717
      14.2.6. wxWindowPtr 717
      14.2.7. wxWeakRef< T > i wxWeakRefDynamic< T > 717
    14.3. Niektóre przydatne funkcje szablonowe 718
    14.4. Podsumowanie 718
  15. Praca z plikami i systemem plików w wxWidgets 719
    15.1. Niektóre funkcje zarządzania plikami i systemem plików 719
      15.1.1. Funkcje zarządzania katalogami 720
      15.1.2. Funkcje zarządzania plikami 721
      15.1.3. Inne funkcje systemu plików 724
    15.2. Specjalistka od katalogów, czyli klasa wxDir 725
      15.2.1. Tworzenie i inicjowanie obiektów wxDir 725
      15.2.2. Testowanie katalogów za pomocą wxDir 725
      15.2.3. Pobieranie informacji o danej lokalizacji 726
      15.2.4. Techniki listowania plików i katalogów z wxDir 726
        15.2.4.1. Listowanie plików i katalogów w pętli 727
        15.2.4.2. Listowanie plików i katalogów przy wsparciu klasy wxDirTraverser 727
        15.2.4.3. Listowanie plików i katalogów za pomocą metody GetAllFiles() 729
      15.2.5. Inne przydatne metody wxDir 729
    15.3. Klasy wxFile oraz wxFFile i podstawowa obsługa plików 730
      15.3.1. Niskopoziomowa obsługa plików, czyli klasa wxFile 730
        15.3.1.1. Tworzenie plików wxFile i zapis danych do pliku 730
        15.3.1.2. Odczyt danych z pliku 732
        15.3.1.3. Deskryptor pliku i pozostałe zagadnienia 733
      15.3.2. Wysokopoziomowa obsługa plików, czyli klasa wxFFile 734
        15.3.2.1. Tworzenie plików wxFFile i zapis danych do pliku 734
        15.3.2.2. Odczyt danych z pliku 735
        15.3.2.3. Pozostałe informacje o wxFFile 736
    15.4. Więcej narzędzi, czyli klasa wxFileName 736
      15.4.1. Tworzenie i inicjowanie obiektów wxFileName 736
      15.4.2. Analiza ścieżki, nazwy i rozszerzenia pliku 737
      15.4.3. Edycja ścieżki, nazwy i rozszerzenia pliku 740
      15.4.4. Ścieżki względne i absolutne 742
      15.4.5. Normalizacja ścieżek (skróty, zmienne środowiskowe i inne) 743
      15.4.6. Odczyt i edycja czasów pliku 744
      15.4.7. Prawa dostępu do pliku lub katalogu 745
      15.4.8. Badanie i wyświetlanie rozmiaru pliku 746
      15.4.9. Tworzenie i obsługa plików tymczasowych z wxFileName 747
      15.4.10. Niektóre pozostałe testy obiektów wxFileName 749
      15.4.11. Proste operacje na systemie plików 749
    15.5. Wirtualne systemy plików wxWidgets 750
    15.6. Praca z archiwami 752
      15.6.1. wxArchiveFSHandler i odczyt danych z archiwów 753
        15.6.1.1. Listowanie zawartości wybranego archiwum 753
        15.6.1.2. Wyświetlanie zawartości pliku w archiwum 753
        15.6.1.3. Rozpakowanie wybranego archiwum do wskazanej lokalizacji 754
      15.6.2. Prezentacja zaawansowanej obsługi archiwów 755
        15.6.2.1. Tworzenie archiwum 756
        15.6.2.2. Rozpakowywanie archiwów 758
        15.6.2.3. Pozostałe operacje i możliwości pracy z archiwami 759
    15.7. Monitorowanie zmian w systemie plików 760
    15.8. Pliki tekstowe wxTextFile 762
      15.8.1. Analiza pliku 763
      15.8.2. Tworzenie i edycja pliku 763
      15.8.3. Odczyt danych pliku 764
    15.9. Pliki tymczasowe wxTempFile 765
    15.10. Ścieżki systemowe, czyli klasa wxStandardPaths 766
      15.10.1. Niektóre przydatne metody wxStandardPaths zależne od platformy 767
        15.10.1.1. Metody dedykowane MS Windows 767
        15.10.1.2. Metody dedykowane Linuksowi 768
    15.11. Podsumowanie 768
  16. Krótki przegląd niektórych zaawansowanych kontrolek GUI 769
    16.1. Prezentacja wxRichTextCtrl 769
      16.1.1. Tworzenie i wstępna konfiguracja obiektów wxRichTextCtrl 770
        16.1.1.1. Tworzenie obiektu edytora 770
        16.1.1.2. Definiowanie arkusza stylów 772
        16.1.1.3. Przygotowanie silnika drukowania i włączenie edytora 774
      16.1.2. Zarządzanie stylami 774
        16.1.2.1. Okno dialogowe wxRichTextStyleOrganiserDialog 774
        16.1.2.2. Kontrolki wyboru stylów 775
      16.1.3. Podstawowe metody edycji tekstu 776
        16.1.3.1. Podstawowe formatowanie tekstu 776
        16.1.3.2. Podstawowe metody formatujące 776
        16.1.3.3. Aktualizacja elementów GUI w zależności od formatowania w pozycji kursora 777
      16.1.4. Rozszerzone formatowanie tekstu 779
        16.1.4.1. Badanie zakresu zaznaczenia tekstu oraz położenia kursora 779
        16.1.4.2. Przykład implementacji efektu znakowego: indeks górny i dolny 779
        16.1.4.3. Przykład implementacji efektu akapitu – zmienna interlinia 781
      16.1.5. Szybka zmiana kroju czcionki (i nie tylko) 781
      16.1.6. Listy 782
        16.1.6.1. Lista numerowana 783
        16.1.6.2. Lista wypunktowana 784
        16.1.6.3. Niektóre operacje na listach 785
      16.1.7. Wstawianie nowych elementów do tekstu 786
        16.1.7.1. Wstawianie znaków specjalnych 786
        16.1.7.2. Wstawianie URL 787
        16.1.7.3. Wstawianie grafiki z pliku 787
        16.1.7.4. Wstawianie tabel 788
      16.1.8. Drukowanie z kontrolką wxRichTextCtrl 790
        16.1.8.1. Podstawowe metody obsługi drukowania 790
        16.1.8.2. Nagłówek i stopka 790
      16.1.9. Operacje plikowe 794
        16.1.9.1. Rozpoznanie formatu pliku 794
        16.1.9.2. Otwieranie dokumentów 794
        16.1.9.3. Zapisywanie dokumentów 795
      16.1.10. Wnioski 795
    16.2. Prezentacja wxRibbonBar 796
      16.2.1. Struktura paska wxRibbonBar 797
      16.2.2. Tworzenie i inicjowanie paska wxRibbonBar 797
        16.2.2.1. Metoda Realize() 798
      16.2.3. Dodawanie stron do paska wxRibbonBar 798
      16.2.4. Dodawanie paneli wxRibbonPanel do stron paska narzędziowego 798
      16.2.5. Klasa wxRibbonButtonBar, czyli pasek przycisków 799
        16.2.5.1. Rodzaje przycisków paska wxRibbonBar 799
        16.2.5.2. Dodawanie paska wxRibbonButtonBar do panelu 800
        16.2.5.3. Dodawanie przycisków do wxRibbonButtonBar i ich obsługa 800
        16.2.5.4. Skalowanie paneli i jego wpływ na wyświetlanie przycisków 802
      16.2.6. Pasek narzędzi wxRibbonToolBar 803
        16.2.6.1. Realizacja paska narzędzi wxRibbonToolBar 803
        16.2.6.2. Obsługa przycisków paska narzędzi wxRibbonToolBar 804
      16.2.7. Galeria danych wxRibbonGallery 804
        16.2.7.1. Tworzenie galerii 804
        16.2.7.2. Zapełnianie galerii danymi 805
        16.2.7.3. Obsługa galerii wxRibbonGallery 807
      16.2.8. Dowolne kontrolki GUI w pasku wxRibbonBar 808
      16.2.9. Obsługa przycisku pomocy 808
      16.2.10. Zmiana wyglądu paska wxRibbonBar 808
      16.2.11. Wnioski i jeszcze więcej opcji... 809
    16.3. Prezentacja wxPropertyGrid i wxPropertyGridManager 810
      16.3.1. Tworzenie menedżera właściwości 811
      16.3.2. Hierarchia siatki i rodzaje właściwości 812
      16.3.3. Wskaźnik i nazwa, czyli różne sposoby identyfikacji właściwości 813
      16.3.4. Realizacja przykładowego menedżera 814
      16.3.5. Pobieranie wartości poszczególnych pól siatki 818
      16.3.6. Obsługa zdarzeń i rozpoznawanie modyfikowanych właściwości 819
      16.3.7. Wnioski 820
      16.4. Inne kontrolki zaawansowane 820
      16.4.1. Klasa wxGrid 820
      16.4.2. Klasa wxWebView 821
      16.4.3. Klasa wxMediaCtrl 823
    16.5. Podsumowanie 824
  17. Tworzenie własnych generycznych kontrolek GUI 825
    17.1. Główne zasady tworzenia własnych kontrolek generycznych 825
      17.1.1. Program przykładowy 826
    17.2. Skalowany panel z obrazkowym tłem 827
      17.2.1. Piszemy klasę panelu 828
      17.2.2. Piszemy klasę zdarzenia panelu 829
      17.2.3. Metody podstawowe, czyli konstruktor, destruktor, Init() i Create() 830
      17.2.4. Metoda rysująca kontrolkę 831
      17.2.5. Metody inicjujące rysowanie 832
      17.2.6. Pozostałe metody 832
      17.2.7. Użycie skalowanego panelu graficznego w kodzie programu 833
    17.3. Implementacja przycisku graficznego 834
      17.3.1. Koncepcja i realizacja klasy przycisku graficznego 834
      17.3.2. Piszemy klasę zdarzeń przycisku 835
      17.3.3. Podstawowe funkcje klasy przycisku 836
      17.3.4. Metody związane z rysowaniem przycisku 838
      17.3.5. Metody obsługi i emisji zdarzeń 839
      17.3.6. Użycie przycisku graficznego w aplikacji 840
        17.3.6.1. Obsługa zdarzeń przycisku 841
      17.3.7. Propozycje udoskonaleń kontrolki 842
    17.4. Implementacja graficznego paska postępu 842
      17.4.1. Koncepcja kontrolki i opracowanie klasy 842
      17.4.2. Konstruktor, destruktor oraz funkcje tworzące i inicjujące pasek 844
      17.4.3. Funkcje inicjujące rysowanie kontrolki 845
      17.4.4. Funkcja rysująca pasek 846
      17.4.5. Stosowanie graficznego paska postępu w aplikacji 848
      17.4.6. Propozycje udoskonalenia paska graficznego 849
    17.5. Implementacja prostego kalendarza 849
      17.5.1. Koncepcja i klasa kalendarza, a także klasy pomocnicze 849
        17.5.1.1. Klasa imienin 849
        17.5.1.2. Klasa dnia miesiąca 851
        17.5.1.3. Okno dialogowe pobierania daty 852
        17.5.1.4. Klasa kalendarza 852
      17.5.2. Klasa zdarzenia kalendarza 854
      17.5.3. Obliczanie danych miesiąca 855
      17.5.4. Obliczanie współrzędnych siatki kalendarza 856
      17.5.5. Metoda Init() 857
      17.5.6. Konstruktor, Create() oraz destruktor 858
        17.5.6.1. Metody związane z rysowaniem kalendarza 859
        17.5.6.2. Metody inicjujące rysowanie 859
        17.5.6.3. Metoda rysująca siatkę kalendarza 859
        17.5.6.4. Metoda rysująca dane poszczególnych dni w miesiącu 860
      17.5.7. Zmiana daty bieżącej 862
      17.5.8. Zdarzenia wewnętrzne i emitowane kalendarza 862
      17.5.9. Metody obsługi zdarzeń menu kontekstowego 864
      17.5.10. Stosowanie klasy MyCalendar w kodzie programu 865
      17.5.11. Propozycje udoskonalenia kalendarza 866
      17.5.12. Tworzenie kontrolek natywnych 866
    17.6. Podsumowanie 867
  18. Techniki i modele realizacji GUI aplikacji 868
    18.1. Sizery wxWidgets 868
      18.1.1. Klasa wxSizer i ogólne aspekty pracy z sizerami 869
        18.1.1.1. Określanie atrybutów elementów sizera 869
        18.1.1.2. Zarządzanie elementami w obrębie sizera 870
        18.1.1.3. Pobieranie wskaźników elementów przypisanych do sizera 872
        18.1.1.4. Wyświetlanie i ukrywanie elementów 872
        18.1.1.5. Pobieranie i dostosowanie rozmiaru oraz pozycji sizera i jego elementów 873
        18.1.1.6. Pozostałe wspólne metody sizerów, dziedziczone z wxSizer 874
      18.1.2. Sizery liniowe i ich stosowanie 874
        18.1.2.1. Klasa wxBoxSizer 875
        18.1.2.2. Klasa wxStaticBoxSizer 876
        18.1.2.3. Klasa wxStdDialogButtonSizer 876
        18.1.2.4. Klasa wxWrapSizer 877
      18.1.3. Sizery tablicowe i ich stosowanie 877
        18.1.3.1. Klasa wxGridSizer 877
        18.1.3.2. Klasa wxFlexGridSizer 879
        18.1.3.3. Klasa wxGridBagSizer 881
      18.1.4. Wnioski 882
    18.2. Multi Document Interface (MDI) 882
      18.2.1. Ogólne zasady tworzenia interfejsu MDI 883
      18.2.2. Automatyczne menu nawigacyjne i menu okien podrzędnych 884
      18.2.3. Poznajemy bliżej klasę wxMDIParentFrame 885
      18.2.4. MDI a model dokument/widok (wxDocument/wxView) 885
        18.2.4.1. Model dokument/widok w wxWidgets 886
        18.2.4.2. Klasy MDI dedykowane modelowi dokument/widok 886
        18.2.4.3. Program przykładowy i koncepcja formatu danych 886
        18.2.4.4. Klasa menedżera dokumentów 887
        18.2.4.5. Klasy dokumentu oraz danych 887
        18.2.4.6. Klasy widoku oraz płótna 889
        18.2.4.7. Wyświetlenie ramek MDI w modelu dokument/widok w programie 891
      18.2.5. Wnioski 893
    18.3. Tworzenie GUI aplikacji przy użyciu wxAUI 893
      18.3.1. Przedstawienie elementów wxAUI 894
        18.3.1.1. Menedżer ramek wxAuiManager 894
        18.3.1.2. Właściwości ramek dokowanych i pływających, czyli klasa wxAuiPaneInfo 896
        18.3.1.3. Kontener wxAuiNotebook 899
        18.3.1.4. Paski narzędzi wxAuiToolBar 901
      18.3.2. Warstwy, wiersze i pozycje, czyli zrozumieć wxAUI 902
      18.3.3. wxAUI w praktyce 903
        18.3.3.1. Menedżer 903
        18.3.3.2. Ramka 1 – edytor (kontener wxAuiNotebook) 903
        18.3.3.3. Ramka 2 – okno konsoli (bezpośrednie dodanie kontrolki) 904
        18.3.3.4. Ramki 3 i 4 – dodanie nowej warstwy GUI 904
        18.3.3.5. Ramka 5 – kontener z sizerem 905
        18.3.3.6. Paski narzędzi 906
        18.3.3.7. Modyfikowanie wyglądu elementów dokowanych 907
        18.3.3.8. To chyba jeszcze nie wszystko! 907
      18.3.3.9. Co z tego wyszło? 907
      18.3.4. Wnioski 908
    18.4. Krótko o pozostałych technikach tworzenia GUI 909
      18.4.1. Single Document Interface (SDI) 909
      18.4.2. wxXRC i zasoby XML 909
    18.5. Słowo o niektórych narzędziach WYSIWYG dedykowanych pracy z wxWidgets 911
      18.5.1. wxFormBuilder 911
      18.5.2. wxSmith 912
      18.5.3. Czy używać narzędzi WYSIWYG? 913
    18.6. Podsumowanie 913
  19. Drukowanie w wxWidgets od kuchni 914
    19.1. Ogólnie o klasie wxPrintout 914
      19.1.1. Tworzenie prostego silnika drukowania 915
      19.1.2. Kustomizacja własnego silnika drukowania 917
      19.1.3. Problemy skalowania wydruku 918
      19.1.4. Źródła danych i kilka silników drukowania w jednym programie 919
    19.2. Konfiguracja wydruku 920
      19.2.1. Klasa wxPrintData 920
      19.2.2. Klasa wxPrintDialogData 921
      19.2.3. Klasa wxPageSetupDialogData 921
    19.3. Klasy wxRichTextBuffer i wxRichTextPrinting oraz drukowanie formatowanego tekstu na skróty 922
    19.4. Podsumowanie 923
  20. Krótki rozdział o technikach przechowywania konfiguracji programu 924
    20.1. Konfiguracja za pomocą klas pochodnych z wxConfigBase 924
      20.1.1. Ogólna koncepcja konfiguracji wxConfigBase 924
      20.1.2. Klasa wxConfigBase 925
        20.1.2.1. Zarządzanie wpisami konfiguracji 925
        20.1.2.2. Odczyt i zapis danych konfiguracyjnych 925
        20.1.2.3. Pozostałe ważniejsze metody wxConfigBase 926
      20.1.3. Plik konfiguracyjny wxFileConfig 926
        20.1.3.1. Struktura pliku konfiguracyjnego 927
        20.1.3.2. Plik konfiguracyjny w praktyce 928
      20.1.4. Konfiguracja w rejestrze systemu, czyli wxRegConfig (MS Windows) 929
        20.1.4.1. Konfiguracja wxRegConfig w praktyce 929
      20.1.5. Konfiguracja domyślna a platforma systemowa 930
    20.2. Zapamiętywanie stanów GUI za pomocą wxPersistanceManager 931
    20.3. Podsumowanie i refleksja na temat innych możliwości zapamiętywania konfiguracji programu 931
  21. wxWidgets i programowanie współbieżne 933
    21.1. Aplikacja wielowątkowa i klasa wxThread 933
      21.1.1. Klasa wxThread 934
        21.1.1.1. Wybrane metody statyczne klasy wxThread 935
      21.1.2. Szkielet aplikacji wielowątkowej 935
      21.1.3. Tworzenie klasy wątku 937
    21.2. Poradnik dla hazardzistów, czyli zabezpieczanie aplikacji przed wyścigiem do danych 939
      21.2.1. Kontrola liczby wątków, czyli klasa wxSemaphore 939
        21.2.1.1. Semafor wxSemaphore w praktyce 940
      21.2.2. Blokowanie dostępu do zasobów, czyli co nieco o tzw. muteksach 941
        21.2.2.1. Korzystanie z wzajemnych wykluczeń w aplikacji 942
        21.2.2.2. Dostęp wątków do biblioteki GUI 942
      21.2.3. Sekcja krytyczna wxCriticalSection 943
    21.3. Wątki i ich zdarzenia 944
    21.4. Podsumowanie 946
  22. wxWidgets i konsola 947
    22.1. Konsolowe aplikacje wxWidgets? 947
      22.1.1. Dostosowanie projektu i makefile 947
        22.1.1.1. MS Windows i Visual Studio 947
        22.1.1.2. Linux i makefile 948
      22.1.2. Szkielet aplikacji konsolowej wxWidgets 948
    22.2. Obsługa parametrów aplikacji z linii komend 949
      22.2.1. Tworzenie list parametrów 949
        22.2.1.1. Sposób 1 – definiowanie parametrów za pomocą metod klasy wxCmdLineParser 950
        22.2.1.2. Sposób 2 – lista parametrów w postaci tablicy wxCmdLineEntryDesc 952
        22.2.1.3. Parsowanie i przetwarzanie parametrów 953
        22.2.1.4. Odczyt i wykorzystanie parametrów w aplikacji 953
        22.2.1.5. Własny tekst w wiadomości pomocy 954
    22.3. Zarządzanie procesami z poziomu aplikacji (wx/utils.h) 955
    22.4. Strumień wyjściowy C++ w kontrolce tekstowej 956
    22.5. Sprawdzanie liczby instancji programu 957
    22.6. Podsumowanie 958
  23. Co jest grane? O logach w wxWidgets 959
    23.1. Klasa wxLog i ogólne informacje o wyświetlaniu logów 959
      23.1.1. Ustawienia ogólne systemu logowania 959
      23.1.2. Poziomy logowania i odpowiadające im funkcje piszące 960
      23.1.3. Wybór komponentów logujących 961
    23.2. Wyjście logu i logowanie w praktyce 962
      23.2.1. Charakterystyka klas wyjścia logu 962
      23.2.2. Logowanie w praktyce 962
        23.2.2.1. Tworzenie obiektów klas wyjścia logu 963
        23.2.2.2. Zmiana wyjścia logu 963
        23.2.2.3. Sterowanie pracą wyjścia logu 964
    23.3. Własny format logu 964
    23.4. Podsumowanie 965
  24. Nie tylko po polsku, czyli internacjonalizacja aplikacji 966
    24.1. Makro _() 966
    24.2. Tłumaczenia aplikacji 966
      24.2.1. Warsztat tłumacza, czyli oprogramowanie poEdit 967
      24.2.2. Przygotowanie tłumaczeń programu z narzędziem poEdit 967
      24.2.3. Samodzielne przygotowanie plików tłumaczeń 969
    24.3. Implementacja kilku języków w aplikacji 970
      24.3.1. Klasa wxLocale i elementy internacjonalizacji 971
        24.3.1.1. Konstruowanie i inicjowanie obiektów wxLocale 971
        24.3.1.2. Lokalizacja plików tłumaczeń 971
        24.3.1.3. Analizowanie danych wczytanego języka 972
        24.3.1.4. Ważniejsze statyczne metody klasy wxLocale 973
      24.3.2. Internacjonalizacja w praktyce, czyli prosty przykład wykorzystania wxLocale 973
    24.4. Regionalizacja aplikacji 975
    24.5. Podsumowanie 976
  25. Programowanie sieciowe z wxWidgets 977
    25.1. Klasa wxSocketBase i komunikacja serwer/klient 977
      25.1.1. Klasa wxSocketBase 977
        25.1.1.1. Ważniejsze metody klasy wxSocketBase 978
        25.1.1.2. Zdarzenia wxSocketBase i ich obsługa 981
      25.1.2. Piszemy prosty serwer, czyli korzystanie z wxSocketServer 982
        25.1.2.1. Przygotowanie niektórych elementów aplikacji 982
        25.1.2.2. Tworzenie serwera 983
        25.1.2.3. Klasa wątku połączenia 984
        25.1.2.4. Tworzenie nowych wątków połączeń 987
      25.1.3. Piszemy prostego klienta, czyli korzystanie z wxSocketClient 988
        25.1.3.1. Przygotowanie i koncepcja aplikacji 988
        25.1.3.2. Tworzenie i usuwanie obiektu klienta 988
        25.1.3.3. Inicjowanie połączenia z serwerem 989
        25.1.3.4. Nawiązanie połączenia i obsługa zdarzeń gniazda 990
        25.1.3.5. Wysyłanie danych na serwer 991
        25.1.3.6. Rozłączanie klienta 991
      25.1.4. Testowanie komunikacji klient/serwer za pomocą wykonanych aplikacji 992
      25.1.5. Programowanie z protokołem UDP 992
    25.2. Klasa wxProtocol i obsługa podstawowych protokołów sieciowych 992
      25.2.1. Klasa protokołu wxProtocol 993
      25.2.2. Obsługa protokołu HTTP (wxHTTP) 993
        25.2.2.1. Ważniejsze metody klasy wxHTTP 994
        25.2.2.2. Prosty przykład – pobieranie źródła strony do bufora lokalnego 994
      25.2.3. Obsługa protokołu FTP w praktyce, czyli piszemy własnego klienta (wxFTP) 995
        25.2.3.1. Przygotowanie aplikacji 995
        25.2.3.2. Dodajemy obiekt wxFTP 997
        25.2.3.3. Piszemy funkcje narzędziowe 998
        25.2.3.4. Łączenie z serwerem FTP 999
        25.2.3.5. Zamykanie połączenia 1001
        25.2.3.6. Zmiana aktywnego katalogu FTP 1001
        25.2.3.7. Niektóre operacje na zdalnym systemie plików 1002
        25.2.3.8. Klasa wątku pobierania i pobieranie pliku z FTP 1003
        25.2.3.9. Klasa wątku wysyłania i wysyłanie plików na FTP 1005
        25.2.3.10. Testowanie klienta FTP 1007
    25.3. Podsumowanie 1007
  26. wxWidgets i nowoczesny OpenGL 1008
    26.1. Klasa wxGLCanvas 1009
    26.2. Klasa wxGLContext 1011
    26.3. Inicjowanie obsługi nowoczesnego OpenGL w aplikacji wxWidgets 1012
    26.4. Przykładowy program i renderowanie sceny 1013
    26.5. Podsumowanie 1015
  27. Zagadnienia programowania bazodanowego z wxWidgets 3+ 1016
    27.1. Przykładowy warsztat 1016
      27.1.1. Biblioteka SOCI 1016
        27.1.1.1. Konfiguracja projektu SOCI w CMake 1017
      27.1.2. Serwer Firebird 1017
      27.1.3. Narzędzie FlameRobin 1017
    27.2. Szybkie wprowadzenie do relacyjnych baz danych i SQL 1018
      27.2.1. Relacyjne bazy danych 1018
      27.2.2. Podstawy języka SQL 1019
        27.2.2.1. Grupa instrukcji Data Definition Language (DDL) 1019
        27.2.2.2. Grupa instrukcji Data Manipulation Language (DML) 1020
        27.2.2.3. Data Query Language (DQL) i instrukcja SELECT 1021
        27.2.2.4. Grupa instrukcji Data Control Language (DCL) 1022
        27.2.2.5. Dla ambitnych, czyli automatyczne nadawanie identyfikatorów 1022
    27.3. Prosty przykład, czyli bazy danych i wxWidgets 3+ w praktyce 1023
      27.3.1. Przygotowanie projektu 1023
      27.3.2. Tworzenie nowej bazy danych za pomocą narzędzia FlameRobin 1024
      27.3.3. Zasady kreowania podstawowych zapytań do bazy danych za pomocą SOCI 1026
      27.3.4. Przykładowy program 1027
        27.3.4.1. Ogólna koncepcja oraz elementy GUI aplikacji ‘Sklep’ 1027
        27.3.4.2. Otwieranie i zamykanie sesji z bazą danych 1028
        27.3.4.3. Pobieranie i wyświetlanie informacji statystycznych i list zamówień 1030
        27.3.4.4. Dodawanie towarów do sklepu 1032
        27.3.4.5. Dodawanie klientów sklepu 1034
        27.3.4.6. Tworzenie i zamykanie zamówień 1036
        27.3.4.7. Wysyłanie własnych zapytań do bazy danych 1040
    27.4. Podsumowanie 1040
  28. Bonus na koniec, czyli jak wykonać ekran startowy 1042
    28.1. Ekran startowy wxSplashScreen 1042
    28.2. Wzbogacony ekran startowy 1043
    28.3. To wciąż za mało! 1046
  Zakończenie 1047
  Dodatek A Krótki leksykon standardowych elementów GUI wxWidgets 1049
    Kontrolki statyczne 1049
    Kontrolki dynamiczne 1053
    Kontenery GUI 1080
  Dodatek B Niektóre ważniejsze rozszerzenia wxWidgets 1087
    wxPdfDocument 1087
    wxMIDI 1087
    wxChart 1088
    wxThumbnail 1089
  Dodatek C Licencje 1090
    wxWindows Library Licence, Version 3.1 1090
    GNU Library General Public License 1091
  Indeks 1097
RozwińZwiń