
Jeśli potrafi to Visual C++, Ty także osiągniesz zamierzony efekt.
Szybko opanujesz zdolności potrzebne do tworzenia zaawansowanych, komercyjnych aplikacji dla Windows i sieci WWW
-- poznasz wszystko, co jest do tego potrzebne, od podstaw tworzenia menu i obsługi myszy, przez technologię ODBC,
DAO aż do własnych skryptów. Korzystając z książki zawodowych programistów Ricka Leineckera i Toma Archera --
"Visual C++ 6. Vademecum profesjoanlisty", szybko zdobędziesz najświeższe informacje potrzebne do utrzymania się
w czołówce najlepszych programistów.Proponujemy Ci doskonałą lekturę, która pomoże w:
- opanowaniu ogólnych i szczegółowych technik programowania dla Windows -- od menu do obsługi wyjątków i operacji wejścia-wyjścia;
- zwiększeniu możliwości obsługi baz danych za pomocą ODBC, klasy baz danych MFC, DAO, ADO oraz OLE DB;
- rozszerzeniu aplikacji o dynamicznie łączone biblioteki DLL oraz biblioteki innych programistów;
- lepszym wykorzystaniu MFC do tworzenia kontrolek ActiveX lub ATL do tworzenia kontrolek o bardzo małej objętości kodu;
- pisaniu dynamicznych aplikacji internetowych, aplikacji korzystających z klasy CHtmlView oraz aplikacji DHTML;
- poznaniu zaawansowanych możliwości pakietu Visual Studio, włącznie z makrami VBScript oraz kreatorami AppWizard tworzonymi przez użytkownika.
- Objective Grid, Objective Grid Lite, Objective Toolkit, Objective Chart, Objective Edit, Objective plug-in oraz Objective Diagram stworzone przez Stingray Software
- Ultimate Grid oraz Ultimate Wizard Factory stworzone przez Dundas Software
- BoundsChecker firmy Compuware NuMega Lab
Część I Podstawy Visual C++Rozdział 1. Zaczynamy (33)
- Co nowego pojawiło się w Visual C++ 6.0 (34)
- Program HelloWorld1 (35)
- Program HelloWorld2 (38)
- Kontrolka ATL HelloWorld3 (40)
- Podsumowanie (43)
- Korzystanie ze zintegrowanego środowiska (45)
- Tworzenie pierwszego projektu (47)
- Dostosowywanie IDE (50)
- Przeglądanie aktualnych skrótów (50)
- Dodawanie, modyfikowanie i usuwanie skrótów (51)
- Korzystanie z pasków narzędzi (53)
- Wyświetlanie i ukrywanie pasków narzędzi (53)
- Dostosowywanie pasków narzędzi (54)
- Podsumowanie (54)
- Co każdy debugger posiadać powinien (56)
- Debugger zintegrowany z Visual Studio (57)
- Przygotowanie aplikacji do debuggowania (57)
- Korzystanie z debuggera podczas działania aplikacji (59)
- Okna debuggowania (60)
- Korzystanie z punktów wstrzymania i wykonywanie programu krok po kroku (64)
- Korzystanie z etykietek danych i okna szybkiego podglądu (67)
- Użycie okien wątków i wyjątków w trakcie debuggowania (67)
- Proste techniki debuggowania (69)
- Korzystanie z okien komunikatów w celu przyspieszenia debuggowania (69)
- Wyjście debuggera (69)
- Korzystanie z asercji (70)
- Zrzut obiektów (71)
- Klasa CMemoryState i wykrywanie wycieków pamięci (71)
- Komunikaty śledzenia MFC (72)
- Zdalne debuggowanie (72)
- Debuggowanie "just-in-time" (74)
- Debuggowanie typu "edit and continue" (74)
- Debuggowanie usług Windows NT (75)
- Podsumowanie (76)
- Optymalizowanie kodu (78)
- Wprowadzenie do profilowania (80)
- Podstawy profilowania aplikacji (82)
- Działanie Profilera (82)
- Rodzaje profilowania (83)
- Zaawansowane ustawienia Profilera (84)
- Włączanie profilowania w Visual C++ 6.0 (84)
- Sterowanie profilowaniem z poziomu Visual Studia (85)
- Wybór funkcji do profilowania (86)
- Działanie programu PREP (86)
- Profilowanie czasu wykonywania funkcji (89)
- Profilowanie pokrycia funkcji (89)
- Opcje profilowania linii (90)
- Profilowanie pokrycia linii (91)
- Łączenie wyników działania Profilera (91)
- Eksportowanie danych z Profilera (92)
- Analizowanie danych Profilera (92)
- Zawartość globalnych rekordów informacyjnych (93)
- Lokalne rekordy informacyjne (94)
- Analizowanie statyki profilowania (95)
- Przetwarzanie wyników profilera w Excelu (96)
- Profilowanie bibliotek łączonych dynamicznie (96)
- Profilowanie komponentów ActiveX lub kontrolek ActiveX (96)
- Profilowanie kodu typu inline (98)
- Profilowanie aplikacji wielowątkowych (98)
- Profilowanie wydajności aplikacji (99)
- Użycie programu CAP do wyeliminowania powtórzonych wywołań (99)
- Profilowanie usług Windows NT (101)
- Podsumowanie (102)
- Spy++ (103)
- Dostosowywanie menu Tools (107)
- Inne operacje w menu Tools (108)
- Przeglądanie klas (109)
- Przeglądanie kodu źródłowego MFC (111)
- Podsumowanie (112)
Rozdział 6. Przegląd programowania w MFC (115)
- Co to jest MFC? (116)
- Filozofia MFC (117)
- Zalety płynące z wykorzystania MFC (117)
- Właściwości, właściwości, właściwości (119)
- Nadająca się do rozbudowy architektura (119)
- Hierarchia klas MFC (120)
- Usługi plików (120)
- Okna (120)
- Grafika (124)
- Obsługa baz danych (125)
- Nie używasz MFC? (125)
- Podsumowanie (126)
- Tworzenie i edycja menu (128)
- Tworzenie menu (129)
- Komunikaty menu w MFC (131)
- Klawisze akceleratorów (132)
- Polecenia wprowadzane poprzez klawiaturę (133)
- Definiowanie klawiszy akceleratorów (134)
- Wybór odpowiednich klawiszy akceleratorów (135)
- Korzystanie z kilku tabel akceleratorów (138)
- Dynamicznie zmieniane menu (140)
- Zakresy poleceń menu (140)
- Zmiana menu w czasie wykonania (141)
- Zmiana istniejącego menu (142)
- Stałe i tymczasowe mapy uchwytów (145)
- Menu kontekstowe (147)
- Podsumowanie (149)
- Komunikaty wejściowe i stan systemu (152)
- Obsługa myszy (152)
- Tworzenie funkcji obsługi komunikatów myszy (153)
- Konwersja pomiędzy współrzędnymi ekranowymi a współrzędnymi okna (155)
- Tworzenie programu MFC obsługującego zdarzenia myszy (156)
- Zdarzenia myszy nie związane z obszarem roboczym (161)
- Zmiana wyglądu wskaźnika myszy (162)
- Demonstracyjny program zmieniający kształt wskaźnika myszy (163)
- Przechwytywanie wskaźnika myszy (166)
- Ograniczanie ruchów myszy (167)
- Odczyt danych z klawiatury (168)
- Klawiatura fizyczna (168)
- Odzwierciedlanie ogniska wprowadzania (172)
- Podsumowanie (178)
- Wprowadzenie do interfejsu urządzeń graficznych (180)
- Rodzaje grafiki (180)
- Rodzaje urządzeń GDI (182)
- Kontekst urządzenia (183)
- Atrybuty rysunkowe kontekstu urządzenia (184)
- Komunikat WM_PAINT (187)
- Współrzędne rysowania (188)
- Generowanie komunikatu WM_PAINT (188)
- Rysowanie poza komunikatem WM_PAINT (190)
- Manipulowanie tekstem (191)
- Obsługa koloru przez GDI (191)
- Kolor tekstu (193)
- Wyrównywanie tekstu (194)
- Justowanie tekstu (195)
- Czcionki (196)
- Czym jest czcionka? (196)
- Wybieranie obiektów w kontekście urządzenia (196)
- Wybieranie czcionek magazynowych (197)
- Wybieranie czcionek niemagazynowych (197)
- Pióra i pędzle (201)
- Pióra (202)
- Pędzle (204)
- Tryby odwzorowania (206)
- Operacje rastrowe (207)
- Funkcje rysujące tekst (209)
- Obliczanie współrzędnych tekstu (210)
- Regiony obcinania (215)
- Podsumowanie (216)
- Pamięć bitmapy i pamięć obrazu (218)
- Tworzenie obiektów CBitmap (220)
- Ładowanie i ustawianie zawartości bitmapy (222)
- Rysowanie obiektów CBitmap na ekranie (223)
- Operacje rastrowe (226)
- Program BlitDemo (229)
- Palety i kolor (234)
- Palety logiczne (237)
- Zdarzenia dotyczące palety (239)
- Funkcja SetSystemPaletteUse() (241)
- Bitmapy niezależne od urządzenia (241)
- Anatomia pliku DIB (241)
- Klasa CDib (243)
- Program demonstracyjny ShowDIB (249)
- Podwójne buforowanie (252)
- Podsumowanie (254)
- Obsługa wyjątków strukturalnych (256)
- Składnia obsługi wyjątków (256)
- Zgłaszanie wyjątków (256)
- Wychwytywanie wyjątków (257)
- Porównanie technik obsługi błędów (258)
- Posługiwanie się kodami błędów (258)
- Obsługa błędów we właściwym kontekście (259)
- Poprawa czytelności kodu (261)
- Zgłaszanie wyjątków przez konstruktory (262)
- Klasa CException (263)
- Tworzenie i usuwanie obiektów CException (263)
- Pobieranie od obiektu CException informacji o błędzie (264)
- Wychwytywanie wyjątków kilku typów (265)
- Definiowanie klas wyprowadzonych z klasy CException (266)
- Klasa CFileException (267)
- Przykładowy program CFileException (269)
- Definiowanie własnych klas wyprowadzonych z klasy CException (272)
- Zaawansowane techniki obsługi wyjątków (275)
- Decydowanie, która funkcja powinna wychwycić wyjątek (276)
- Wybór kodu przeznaczonego do umieszczenia w bloku try (277)
- Wybór kodu przeznaczonego do umieszczenia w bloku catch (278)
- Zgłaszanie wyjątków w funkcjach wirtualnych (279)
- Podsumowanie (282)
- Wprowadzenie (283)
- Tworzenie kontrolek (284)
- Używanie klasy CButton (287)
- Używanie klasy CListBox (289)
- Używanie klasy CEdit (293)
- Używanie klasy CStatic (297)
- Używanie klasy CScrollBar (300)
- Używanie klasy CComboBox (303)
- Program Mini edytora (306)
- Zaawansowane programowanie kontrolek (307)
- Dodawanie interfejsu klawiatury (307)
- Modyfikowanie działania kontrolki (308)
- Przyciski z bitmapami (309)
- Zmiana koloru kontrolki (311)
- Podsumowanie (313)
- Korzystanie z edytora dialogów (316)
- Szablony dialogów (316)
- Tworzenie nowego szablonu projektu (317)
- Edycja szablonu dialogu (318)
- Testowanie dialogu (323)
- Klasa CDialog (323)
- Modalne i niemodalne okna dialogowe (323)
- Tworzenie za pomocą ClassWizarda klas wyprowadzonych z klasy CDialog (325)
- Zatwierdzanie i wymiana danych dialogu (326)
- Tworzenie zmiennych DDX (326)
- Funkcje DoDataExchange oraz UpdateData (327)
- Program demonstracyjny AddressBook (329)
- Edycja przykładowego dialogu (329)
- Klasa CContact (331)
- Przesłaniamy funkcję OnInitDialog (332)
- Obsługa komunikatu WM_DESTROY (333)
- Wyświetlanie danych (334)
- Obsługa komunikatów przycisków (334)
- Budowanie i testowanie programu demonstracyjnego (335)
- Stosowanie w dialogach kontrolek klas pochodnych (336)
- Tworzenie klas kontrolek (336)
- Program AddressBook: CAutoCompleteComboBox (340)
- Serializacja (342)
- Uczynienie klas serializowalnymi (343)
- Implementowanie funkcji wirtualnej Serialize() (343)
- Odczyt danych z dysku (344)
- Zapis danych na dysk (344)
- Dodanie serializacji do programu AddressBook (344)
- Podsumowanie (350)
- Klasy CPropertySheet oraz CPropertyPage (352)
- Tworzenie zasobu karty właściwości (353)
- Tworzenie klasy CPropertyPage (354)
- Tworzenie i wyświetlanie modalnego arkusza właściwości (354)
- Tworzenie i wyświetlanie niemodalnego arkusza właściwości (354)
- Tworzenie i wyświetlanie arkusza właściwości wewnątrz istniejącego dialogu (356)
- Program demonstrujący modalny arkusz właściwości (357)
- Karty i arkusze właściwości: rady i techniki (359)
- Usuwanie standardowych przycisków (359)
- Zmiana położenia standardowych przycisków (361)
- Zmiana tytułów standardowych przycisków (362)
- Wyłączanie zakładek (362)
- Ponowne włączanie kart właściwości (366)
- Dynamiczna zmiana tytułów kart właściwości (367)
- Zmiana czcionki zakładek (370)
- Użycie mnemonik z obiektami CPropertyPage (370)
- Podsumowanie (372)
- Klasa CString (374)
- Tworzenie łańcuchów (374)
- Dostęp do łańcucha znaków (375)
- Porównania łańcuchów (376)
- Wydzielanie podłańcuchów (378)
- Wyszukiwanie podłańcuchów (378)
- Program StringDemo (379)
- Klasa CFile (385)
- Program FileDemo (389)
- Klasa CCompressedFile (395)
- Program CompressDemo (396)
- Kompresja danych (398)
- Metoda Huffmana (398)
- LZSS (399)
- LZW (399)
- Funkcje klasy CCompressedFile (400)
- Działanie programu CompressDemo (402)
- Klasa CSerial dla komunikacji szeregowej (405)
- Komunikacja szeregowa (405)
- Klasa CSerial (406)
- Klasa CRegistry (408)
- Wartości Rejestru (408)
- Predefiniowane klucze Rejestru (408)
- Powszechnie wykorzystywane klucze Rejestru (409)
- Działanie klasy CRegistry (410)
- Korzystanie ze schowka (412)
- Podsumowanie (415)
- Odtwarzanie zarejestrowanych dźwięków (417)
- Rzut okiem na klasę CWave (418)
- Odtwarzanie plików dźwiękowych za pomocą Windows API (418)
- Funkcje klasy CWave (421)
- Program WaveDemo (422)
- Odtwarzanie plików MIDI (425)
- Czym jest MIDI? (426)
- Rzut okiem na klasę CMidi (426)
- Funkcje klasy CMidi (426)
- Program MIDIDemo (427)
- CD Audio (431)
- Rzut okiem na klasę CCDAudio (432)
- Media Control Interface (432)
- Funkcje klasy CCDAudio (433)
- Program CDPlayer (434)
- Podsumowanie (440)
- Timery (442)
- Przygotowanie timera do wysyłania komunikatów WM_TIMER (442)
- Przygotowanie timera do wywoływania funkcji zwrotnej (444)
- Program Clock (446)
- Przetwarzanie w jałowym czasie aplikacji (452)
- Program OnIdleDemo (454)
- Podsumowanie (457)
Rozdział 18. Zarządzanie pamięcią (461)
- Zarządzanie pamięcią systemową (461)
- 32-bitowy, stronicowany tryb adresowania Intela (464)
- Przestrzeń adresowa procesu w Windows 98 (466)
- Porządkowanie pamięci systemowej (470)
- Prywatna pamięć procesu (472)
- Alokowanie stron (473)
- Pamięć alokowana przez kompilator (478)
- Prywatne sterty Win32 (483)
- Pamięć wspólna (490)
- Pliki odwzorowane w pamięci (492)
- Dynamiczne alokowanie wspólnych stron (498)
- Statyczne alokowanie wspólnych stron (502)
- Podsumowanie (503)
- Projekt typu dokument-widok (506)
- Klasa CDocument (507)
- Deklarowanie klasy dokumentu w aplikacji (508)
- Zmienne składowe klasy CDocument (509)
- Dokumenty a przetwarzanie komunikatów (511)
- Przesłanianie wirtualnych funkcji dokumentu (512)
- Praca ze złożonymi danymi dokumentu (513)
- Zalety klas CCmdTarget oraz CDocItem (516)
- Znaczenie funkcji InitInstance dla dokumentów (518)
- W jaki sposób aplikacja zarządza dokumentami i widokami (519)
- Klasa CSingleDocTemplate (519)
- Okna ramek (520)
- Zasoby wzorców dokumentów (520)
- W jaki sposób zasób łańcucha wpływa na wzorzec dokumentu (521)
- Podział zasobu łańcucha (522)
- Przegląd standardowych zasobów widoków (523)
- Czas życia wzorca dokumentu (524)
- Zaawansowane posługiwanie się wzorcami (525)
- Praca z kilkoma wzorcami (525)
- Niszczenie wzorców dodanych funkcją składową AddDocTemplate() (527)
- Wykorzystanie klasy CView (528)
- Deklarowanie klasy widoku (528)
- Funkcje składowe klasy CView (529)
- Widoki a komunikaty (531)
- Warianty klasy okna wyprowadzone z klasy CView (532)
- Aplikacje oparte na klasie CFormView i aplikacje okien dialogowych (533)
- Powrót do okien ramki (533)
- Znaczenie funkcji AfxGetMainWnd() (534)
- Aplikacja jednodokumentowa HexView (535)
- Podsumowanie (541)
- Ponowny przegląd modelu dokument-widok (544)
- Ponowny przegląd klasy CDocument (546)
- Zarządzanie bardziej złożonymi kombinacjami dokumentów, widoków i ramek (547)
- Praca z kilkoma rodzajami dokumentów (547)
- Użycie kilku rodzajów widoków dokumentu (548)
- Klasa CMDIFrameWnd (550)
- Klasa CMDIChildWnd (551)
- Klasa CMultiDocTemplate (553)
- Narzut związany z użyciem klasy CDocument (554)
- Dalsze właściwości aplikacji MDI (554)
- Program PaintObj (555)
- Dzielone okna (562)
- Różnice pomiędzy dzielonymi oknami (563)
- Specyfika klasy CSplitterWnd (564)
- Dodatkowe uwagi na temat dynamicznych okien dzielonych (566)
- Użycie różnych widoków w dynamicznych panelach (567)
- Użycie obiektu CRuntimeClass (568)
- Użycie okien dzielonych z widokami powiązanymi z więcej niż jednym dokumentem (569)
- Użycie statycznych okien dzielonych (570)
- Tworzenie statycznego okna dzielonego (570)
- Wspólne paski przewijania (571)
- Wyznaczanie rozmiaru aktualnego i idealnego (572)
- Wydajność okien dzielonych (573)
- Program Dynsplit (573)
- Subclassing okien potomnych (578)
- Subclassing okien z pomocą MFC (579)
- Alternatywy dla architektury dokument-widok (580)
- Podsumowanie (581)
- Obsługa wydruku wbudowana w API Windows (584)
- Informacje o drukarce (587)
- Znaczenie charakterystyki tekstu (588)
- Przykład drukowania z użyciem API Windows (589)
- Drukowanie w MFC (591)
- Podział ról przy drukowaniu (591)
- Sekwencja wydruku w MFC (592)
- Dalszy wgląd w domyślny proces drukowania w MFC (595)
- Protokół wydruku (596)
- Przesłanianie funkcji klasy widoku (596)
- Klasa CPrintInfo (598)
- Strony wydruku a strony dokumentu (598)
- Implementacja podziału na strony (paginacji) (599)
- Dodanie funkcji pomocniczych (601)
- Paginacja w czasie wydruku (604)
- Powrót do drukowanie nagłówków i stopek (604)
- Alokowanie zasobów GDI dla wydruku (605)
- Powiększanie drukowanego obrazu (606)
- Architektura podglądu wydruku (606)
- Proces podglądu wydruku (607)
- Modyfikowanie podglądu wydruku (607)
- Rozszerzanie podglądu wydruku w aplikacji (608)
- Klasa CPrintDialog (610)
- Program HexViewMDI (611)
- Podsumowanie (615)
- Czasem potrzeba większej kontroli (618)
- Pętla modalna (619)
- Wnętrze funkcji RunModalLoop() (619)
- Parametry pętli modalnej (622)
- Przerywanie pętli modalnej (623)
- Tworzenie modalnej aplikacji (623)
- Tworzenie i zamykanie okna modalnego (624)
- Dodawanie funkcji obsługi (624)
- Prosta modalna aplikacja (627)
- Dalsza rozbudowa modalnego okna (628)
- Rysowanie przezroczystej bitmapy na przezroczystym obszarze roboczym (632)
- Wyświetlanie bitmapy (633)
- Wyznaczenie miejsca wklejenia bitmapy (636)
- Zgodne konteksty urządzeń (637)
- Struktura BITMAP (638)
- Składanie wszystkiego razem (640)
- Ograniczenie obszaru kliknięcia (642)
- Podsumowanie (643)
- Tworzenie i wykorzystywanie pasków stanu (646)
- Tworzenie paska stanu (646)
- Dostosowywanie pasków stanu (647)
- Tworzenie i kontrolowanie pasków narzędzi (651)
- Paski kontrolek MFC (651)
- Tworzenie i inicjowanie paska narzędzi (652)
- Korzystanie z kontrolek ReBar (657)
- Podsumowanie (658)
- CTreeCtrl (660)
- Podstawy kontrolki widoku drzewa (661)
- Klasa CTreeCtrl (662)
- Program demonstracyjny CTreeCtrlDemo (670)
- CListCtrl (675)
- Podstawy kontrolki widoku listy (675)
- Klasa CListCtrl (676)
- Podsumowanie (681)
- Wątki (684)
- Tworzenie wątków roboczych (685)
- Funkcja wątku (687)
- Tworzenie wątków interfejsu użytkownika (687)
- Wstrzymywanie i wznawianie wątków (688)
- Usypianie wątków (689)
- Kończenie działania wątku (689)
- Kończenie działania wątku z wnętrza innego wątku (690)
- Wątki, procesy i priorytety (693)
- Klasy priorytetu procesu (695)
- Dzielenie obiektów MFC pomiędzy wątkami (695)
- Używanie funkcji biblioteki czasu wykonania C w aplikacjach wielowątkowych (698)
- Program ThreadDemo1 (699)
- Podsumowanie (703)
Rozdział 26. ODBC (707)
- Terminologia związana z ODBC i bazami danych (708)
- ODBC - potrzeba standardu (710)
- Standard ODBC (710)
- Poziomy zgodności ODBC API (711)
- Poziomy zgodności ODBC SQL (712)
- ODBC - implementacja (713)
- Konfigurowanie ODBC (713)
- Łączenie się ze źródłem danych (715)
- Pobieranie informacji o źródle danych (716)
- Przygotowywanie i wykonywanie poleceń SQL (716)
- Pobieranie danych (717)
- Odłączanie się od źródła danych (718)
- Użycie ODBC do pobierania danych (719)
- Dodawanie obsługi ODBC do projektu Visual C++ (720)
- Modyfikowanie okna dialogowego programu (720)
- Dodawanie kodu inicjalizacji i dostępu do bazy danych (721)
- Użycie ODBC do dynamicznego odpytywania źródła danych (727)
- Deklaracja klasy CODBCDynamic (727)
- Działanie klasy CODBCDynamic (729)
- Użycie klasy CODBCDynamic (734)
- Podsumowanie (735)
- Klasa CDatabase (738)
- Klasa CRecordset (741)
- Konstruowanie rekordsetu (745)
- Otwieranie rekordsetu (746)
- Odczyt i zapis danych z użyciem RFX (746)
- Filtrowanie rekordów (747)
- Sortowanie rekordów zwróconych przez rekordset (749)
- Poruszanie się w zestawie wyników (750)
- Zapisywanie rekordów (751)
- Usuwanie rekordów (751)
- Użycie klas baz danych MFC (752)
- Dodanie obsługi klas baz danych MFC (752)
- Tworzenie interfejsu użytkownika dla programu demonstracyjnego (752)
- Dodawanie klasy pomocniczej reprezentującej dane użytkownika (753)
- Tworzenie klasy rekordsetu dla tabeli UserMaster (754)
- Modyfikowanie pliku nagłówkowego dialogu (754)
- Modyfikowanie pliku implementującego dialog (754)
- Parametryzowane rekordsety i kwerendy (761)
- Tworzenie interfejsu użytkownika dla programu (761)
- Tworzenie klasy rekordsetu dla tabeli UserMaster (763)
- Modyfikowanie klasy CRecordset, tak aby akceptowała parametry (763)
- Dodawanie możliwości wyszukiwania (763)
- Budowanie aplikacji (765)
- Tworzenie parametryzowanych kwerend (765)
- Demonstracyjna baza danych (766)
- Tworzenie rekordsetu uprawnień (767)
- Podsumowanie (770)
- Podstawy DAO (772)
- Historia DAO (772)
- Hierarchia DAO (774)
- Interfejsy DAO (778)
- Użycie klas MFC DAO (779)
- Klasa CDaoDatabase (780)
- Klasa CDaoWorkspace (782)
- Klasa CDaoRecordset (783)
- Program demonstrujący użycie MFC DAO (793)
- Tworzenie demonstracyjnego projektu (793)
- Tworzenie interfejsu użytkownika dla programu demonstracyjnego (794)
- Dodawanie klasy pomocniczej reprezentującej dane użytkownika (795)
- Tworzenie klasy rekordsetu dla tabeli UserMaster (795)
- Modyfikowanie pliku nagłówkowego dialogu (795)
- Modyfikowanie pliku implementującego dialog (796)
- Testowanie aplikacji DaoUserMaintenance (803)
- Podsumowanie (804)
Rozdział 29. Praca z bibliotekami DLL (807)
- Podstawy bibliotek DLL (808)
- Biblioteki dynamiczne i statyczne (808)
- Ładowanie bibliotek DLL (809)
- Zwykłe biblioteki DLL w Visual C++ (810)
- Wewnętrzne działanie zwykłych bibliotek DLL (811)
- Dynamiczne ładowanie DLL-i (813)
- Przykłady sytuacji wymagających dynamicznego ładowania bibliotek DLL (813)
- Haki Windows (815)
- Globalne obiekty C++ w bibliotekach DLL (822)
- Biblioteki DLL rozszerzeń MFC (829)
- Działanie bibliotek DLL rozszerzeń MFC (829)
- Eksportowanie klas przez biblioteki rozszerzeń MFC (830)
- Makro AFX_EXT_CLASS (831)
- Użycie zagnieżdżonych bibliotek rozszerzeń MFC (831)
- Eksportowanie zasobów (832)
- Pisanie demonstracyjnej biblioteki DLL rozszerzeń MFC zawierającej dokumenty i widoki (832)
- Podsumowanie (837)
- Biblioteki tworzone przez osoby trzecie (840)
- Przegląd biblioteki ImageObject (843)
- Format pliku BMP (844)
- Format pliku GIF (845)
- Format pliku JPEG (845)
- Format pliku PCX (845)
- Format pliku TGA (845)
- Format pliku TIF (846)
- Ładowanie obrazków (846)
- Wyświetlanie obrazków (847)
- Program Display (850)
- Skalowanie, obcinanie i zmiana głębokości koloru (852)
- Tworzenie obrazka z kontekstu urządzenia (854)
- Tworzenie obrazu ze schowka (854)
- Zapisywanie obrazków (855)
- Przetwarzanie obrazów (857)
- Program ProcessImage (860)
- Podsumowanie (867)
Rozdział 31. Wprowadzenie do ActiveX i projektowania kontrolek ActiveX (871)
- Pochodzenie i zastosowanie ActiveX (872)
- Różne technologie ActiveX (874)
- Serwery automatyzacji (874)
- Sterowniki automatyzacji (874)
- Kontrolki ActiveX (875)
- Obiekty COM (875)
- Dokumenty ActiveX (876)
- Kontenery ActiveX (877)
- Do czego możesz wykorzystać ActiveX (877)
- Jaki rodzaj komponentu ActiveX jest Ci potrzebny? (878)
- Użycie serwerów i sterowników automatyzacji (879)
- Użycie kontrolek ActiveX (880)
- Używanie obiektów COM (880)
- Tworzenie komponentów ActiveX z użyciem MFC (881)
- Użycie biblioteki ATL do tworzenia komponentów ActiveX (882)
- Użycie biblioteki BaseControl do tworzenia komponentów ActiveX (883)
- Tworzenie własnej biblioteki (884)
- Podstawy architektury komponentów ActiveX (884)
- Serwery automatyzacji ActiveX (885)
- Kontrolki ActiveX (886)
- Narzędzia wymagane do tworzenia komponentów ActiveX (887)
- Kompilator MIDL (887)
- Mktyplib (887)
- GUIDGEN (888)
- RegEdit (888)
- Serwer rejestracji (888)
- Ole2View (888)
- Dodawanie narzędzi do środowiska programowego Visual C++ (889)
- Użycie MFC do tworzenia prostej kontrolki ActiveX (889)
- Tworzenie podstawowego projektu kontrolki (890)
- Rejestracja kontrolki (893)
- Tworzenie metod (894)
- Właściwości (900)
- Rysowanie kontrolki (912)
- Rysowanie standardowe (912)
- Podsumowanie (914)
- Tworzenie podstawowego projektu (918)
- Dodawanie do aplikacji interfejsu automatyzacji (919)
- Rejestrowanie serwera (923)
- Tworzenie roboczego kodu serwera (924)
- Dodawanie metod (927)
- Dodawanie właściwości do serwera (932)
- Generowanie wyjątków OLE (933)
- Serwery o podwójnym interfejsie (939)
- Generowanie wyjątków OLE podwójnego interfejsu (947)
- Tworzenie obiektu serwera w programie C++ (952)
- Częste problemy związane z tworzeniem serwerów OLE poprzez C++ (954)
- Tworzenie dzielonych serwerów (954)
- Serwer w pojedynczym egzemplarzu (958)
- Podsumowanie (959)
- Przegląd biblioteki ATL (961)
- Tworzenie kontrolki ATL (963)
- Dodanie obiektu COM do projektu (964)
- Modyfikowanie pliku nagłówkowego klasy CDoublePend (965)
- Implementowanie funkcji interfejsu (967)
- Używanie kontroli w C++ (971)
- Typy danych (973)
- Zamiana na typ BSTR i z typu BSTR (973)
- Porównywanie łańcuchów BSTR (974)
- Przeglądanie zawartości łańcucha BSTR w debuggerze (975)
- Osadzanie kontrolek ActiveX na stronach WWW (975)
- Podsumowanie (976)
Rozdział 34. Programowanie dla Internetu (979)
- Klasa CInternetSession (980)
- Klasa CFtpConnection (981)
- Pobieranie pliku z serwera FTP (984)
- Wysyłanie pliku do serwera FTP (988)
- Inne funkcje FTP (988)
- Klasa CInternetFile (990)
- Klasa CFtpFileFind (991)
- Program FTP (991)
- Gniazda i klasa CSocket (998)
- Tworzenie gniazd (999)
- Łączenie się z gniazdem (1000)
- Nasłuchiwanie połączenia (1001)
- Odczyt i zapis danych (1002)
- Program Sockets (1003)
- Program SendEmail (1009)
- Pobieranie pliku HTTP (1014)
- Program AutoDialer (1015)
- Podsumowanie (1017)
- Tworzenie projektu CHtmlView (1020)
- Zamiana projektów na projekty korzystające z klasy CHtmlView (1021)
- Nawigowanie w widoku CHtmlView (1022)
- Program SimpleBrowser (1024)
- Program MultiBrowser (1026)
- Bezpośrednie wykorzystanie kontrolki Web Browser (1030)
- Tworzenie przeglądarki prowadzącej dziennik nawigacji (1031)
- Tworzenie przeglądarki blokującej witryny WWW (1032)
- Podsumowanie (1033)
- Podstawy HTML (1036)
- Arkusze stylów (1038)
- Globalne arkusze stylów (1041)
- Składnia arkusza stylu (1042)
- Prosta przeglądarka plików (1042)
- Modele obiektów i zdarzeń (1044)
- Skrypty (1047)
- Skrypty dla elementów (1048)
- Zmiana innych elementów niż elementy tekstowe (1051)
- Uruchamianie skryptu podczas ładowania dokumentu (1052)
- Tworzenie dialogów w skryptach (1056)
- Podsumowanie (1058)
Rozdział 37. Skrypty w Visual Studio (1061)
- Makra w Visual Studio (1062)
- Szybkie makra (1062)
- Tworzenie makr VBScriptu (1064)
- Kod makr VBScriptu (1066)
- Edycja makra VBScriptu (1066)
- Tworzenie pustego makra (1067)
- Użycie makr VBScriptu (1069)
- Ładowanie plików makr (1069)
- Uruchamianie makr VBScriptu (1070)
- VBScript (1072)
- Programowanie VBScriptu (1073)
- Używanie zmiennych (1073)
- Używanie stałych (1074)
- Używanie funkcji i procedur (1074)
- Model obiektów Visual Studia (1074)
- Dostęp do obiektów (1074)
- Użycie obiektu Application (1075)
- Przykładowa aplikacja (1078)
- Uruchamianie przykładowego makra (1078)
- Działanie przykładowego makra (1080)
- Podsumowanie (1087)
- Działanie AppWizarda (1090)
- Menedżer AppWizarda (1090)
- Słownik oraz klasa CCustomAppWiz (1091)
- Tworzenie własnego AppWizarda (1094)
- Przykład definiowania domyślnych ustawień projektu (1096)
- Tworzenie demonstracyjnego projektu kreatora SDIAutomationWiz (1096)
- Definiowanie klasyCCustomAppWiz (1096)
- Słowniki makr (1098)
- Bardziej zaawansowany własny AppWizard (1099)
- Dodawanie własnego okna dialogowego (1099)
- Tworzenie własnych plików wzorcowych (1101)
- Zmiana pliku newproj.inf (1103)
- Zmiana plików ClassWizarda (1105)
- Zmiana plików wzorcowych AppWizarda (1105)
- Zmiana pliku CONFIRM.INF (1109)
- Użycie Rejestru do utrwalenia makr (1110)
- Modyfikowanie klasy CAboutWizAppWiz tak, aby używała Rejestru (1110)
- Podsumowanie (1113)
Skorowidz (1139)
Na CD-ROM-ie (1140)