

Obecnie wielu programistów tworząc aplikacje dla Windows korzysta z biblioteki MFC (Microsoft Foundation Classes). Guru Visual C++, Al Williams, zabiera czytelników w podróż po świecie MFC, przedstawiając najefektywniejsze sposoby jego wykorzystania. Nie unika także trudniejszych tematów, takich jak wielowątkowość, bazy danych, DLL-e rozszerzeń powłoki czy własne kreatory AppWizard.
W tej książce znajdziesz cenne informacje na temat dostosowywania MFC do swoich potrzeb. Do omawianych zagadnień należą:
- Obsługa plików wielu formatów
- Serializacja własnych obiektów
- Inteligentne drukowanie
- Edycja w podglądzie wydruku
- Dostosowywanie elementów kontrolnych
- Niemodalne arkusze właściwości
- Własne kreatory AppWizard
- Własne procedury DDX i DDV
- Rozszerzanie MFC za pomocą bibliotek DLL
- ActiveX i programy internetowe
- Bazy danych, wielowątkowość i wiele innych rzeczy
O autorze: Al Williams programował praktycznie wszystko - od wielkich komputerów po malutkie jednoukładowe systemy. Obecnie specjalizuje się w pisaniu aplikacji dla Windows w C++, C i Assemblerze. Al jest autorem wielu popularnych książek o programowaniu, a także prowadzi własną kolumnę w Dr Dobb"s Sourcebook oraz Visual Developer Magazine.
Wstęp (15)
- Dlaczego ta książka? (15)
- Dawno temu... (16)
- Ograniczenia narzucane przez MFC (17)
- Jak używać tej książki (18)
Rozdział 1. Architektura (19)
- Warcaby (21)
- Ale mój program nie działa w taki sposób! (25)
- Test przydatności oficerów armii (26)
- Okna ramek (28)
- Kilka słów o mapach komunikatów (29)
- Przekazywanie komunikatów (31)
- Szablony dokumentów (35)
- Informacje szczegółowe (36)
- Klasa CWinApp (36)
- CView (39)
- CDocument (41)
- Klasa CFrameWnd i klasy pokrewne (43)
- CDocTemplate (46)
- Obsługa obiektów podczas działania programu (48)
- Obiekty pomocnicze (50)
- Obiekty klasy CWnd (51)
- Pomoc ze strony klasy CObject (52)
- Kilka słów o Kolekcjach (54)
- Sposoby używania szablonów (54)
- Szczegółowe informacje o kolekcjach (57)
- Podsumowanie (60)
Praktyczny przewodnik Architektura (63)
- Obsługa komunikatów użytkownika (63)
- Tworzenie nowych typów dokumentów (68)
- Tworzenie prywatnych dokumentów (69)
- Dołączanie wielu widoków do dokumentu (69)
- Tworzenie oddzielnego menu Plik_Nowy (70)
- Zapobieganie tworzeniu nowego dokumentu podczas uruchamiania programu (71)
- Analiza parametrów linii poleceń (71)
- Określanie wielkości widoków (73)
- Używanie słowa kluczowego typedef ze wzorcami (73)
- Dwuwymiarowe obiekty CArray (74)
Rozdział 2. Serializacja (75)
- Stałość a pamięć (76)
- Szybka prezentacja klasy CArchive (77)
- Tajniki poleceń służących do otwierania i zapisywania plików (79)
- Tworzenie własnych okien dialogowych (83)
- Inny przykład (92)
- Tajniki klasy CDib (93)
- Przykładowa aplikacja (93)
- Serializacja obiektów (95)
- Obsługa różnych wersji serializowanych obiektów (97)
- Własne metody serializacji (101)
- Drobne modyfikacje serializacji (104)
- Zagadnienia przenaszalności (105)
- Podsumowanie (105)
Praktyczny przewodnik Serializacja (107)
- Tworzenie serializowalnych klas (107)
- Określanie okien dialogowych używanych do podawania nazw plików (108)
- Używanie istniejącego lub własnego kodu obsługi plików (108)
- Tworzenie archiwów operujących na niestandardowych strumieniach (109)
- Odczytywanie starszych wersji plików (109)
Rozdział 3. Drukowanie (111)
- Drukowanie w MFC - wielkie kłamstwo? (112)
- Dylemat (117)
- Pełny przykład drukowania (118)
- Dostosowywanie podglądu listingu do własnych potrzeb (124)
- Dostosowywanie podglądu listingu (126)
- Przykład własnego podglądu listingu (127)
- Bardziej zaawansowane dostosowywanie podglądu listingu (131)
- Wyprowadzanie klasy (132)
- Wewnętrzne tajniki sporządzania podglądu listingu (132)
- Tworzenie podglądu listingu umożliwiającego edycję (133)
- Podsumowanie (138)
Praktyczny przewodnik Drukowanie (139)
- Zarządzanie oknem dialogowym Drukuj (139)
- Skalowanie listingu (140)
- Drukowanie innych elementów (140)
- Drukowanie nagłówków i stopek (141)
- Modyfikowanie paska narzędzi okna podglądu listingu (141)
- Modyfikowanie działania podglądu listingu (142)
Rozdział 4. Okna, widoki i elementy kontrolne (143)
- Poprawiony element CListCtrl (145)
- Modyfikowanie elementu kontrolnego (146)
- Zaznaczanie wybranego elementu listy (147)
- Wykorzystanie zmodyfikowanej listy (149)
- Elementy kontrolne używane w oknach dialogowych (151)
- Ogólne operacje na oknach (152)
- Określanie stylów oraz warunków początkowych (152)
- Własne klasy okien (154)
- Ograniczanie wielkości okna (155)
- Określanie tytułu (159)
- Stosowanie UpdateCMDUI (159)
- Klasa CScrollView (160)
- Umożliwianie przewijania za pomocą klawiatury (162)
- Optymalizacja przewijania (165)
- Przewijanie o więcej niż 32K jednostek (167)
- Kilka słów o klasie CEditView (173)
- Usprawnianie widoku CEditView (173)
- Klasa CEditView i okna dzielone (179)
- Klasa CRichEditView (181)
- Praca z elementami kontrolnymi rysowanymi przez użytkownika (187)
- Rozwiązanie stosowane w MFC: samodzielne rysowanie (188)
- Inne rozwiązania (188)
- Wykorzystanie elementów działających zgodnie z metodą samodzielnego rysowania (193)
- Listy oraz pola kombo rysowane przez użytkownika (196)
- Menu samodzielnego rysowania (199)
- Edycja elementów list oraz drzew w oknach dialogowych (201)
- Okna dzielone (204)
- Co widzi użytkownik (204)
- Programowa obsługa okien dzielonych (205)
- Zagnieżdżanie okien dzielonych (206)
- Dlaczego nie używać klasy CSplitterWnd? (208)
- Podsumowanie (209)
Praktyczny Przewodnik Okna, widoki oraz elementy kontrolne (211)
- Określanie stylu okien (211)
- Usuwanie tytułu dokumentu (212)
- Stosowanie własnych ikon, wskaźników myszy oraz tła (212)
- Tworzenie widoków o określonej wielkości (213)
- Tworzenie listy, w której zaznaczane będą wszystkie kolumny (213)
- Przewijanie przy wykorzystaniu klawiatury (214)
- Przewijanie dużych ilości elementów w systemie Windows 95 (215)
- Stosowanie wielu widoków CEditView z tym samym dokumentem (215)
- Określanie sposobu formatowania w widoku CRichEditView (216)
- Stosowanie elementów kontrolnych rysowanych przez użytkownika (216)
- Efektywne stosowanie edycji etykiet w listach i drzewach (217)
- Zagnieżdżanie okien dzielonych (217)
Rozdział 5. Okna dialogowe (219)
- MFC i okna dialogowe (220)
- Implementacja niemodalnego okna dialogowego (221)
- Stosowanie techniki DDX/DDV (223)
- Kilka słów o weryfikacji danych (227)
- Weryfikacja danych podczas ich wprowadzania (227)
- Inne sztuczki związane z mapami danych (231)
- Tworzenie własnych metod DDX/DDV (231)
- Integracja z kreatorem Class Wizard (236)
- Stosowanie pasków dialogowych (238)
- Modyfikowanie pasków narzędzi (239)
- Dostosowywanie standardowych okien dialogowych (245)
- Szczegółowy opis sposobu modyfikowania (246)
- Przykładowe okno wyboru kolorów (247)
- Modyfikowanie okna dialogowego służącego do wyboru plików (249)
- Podsumowanie (252)
Praktyczny przewodnik Okna dialogowe (253)
- Tworzenie niemodalnych okien dialogowych (253)
- Uaktualnianie zmiennych DDX po modyfikacji elementów kontrolnych (254)
- Weryfikacja danych po ich zmodyfikowaniu (255)
- Tworzenie własnych funkcji DDX i DDV (255)
- Integrowanie własnych funkcji DDX i DDV z kreatorem Class Wizard (256)
- Paski dialogowe a paski narzędzi (256)
- Modyfikowanie standardowych okien dialogowych (257)
Rozdział 6. Arkusze właściwości i kreatory (259)
- Przegląd arkuszy właściwości (260)
- Korzystanie z pojedynczego szablonu (262)
- Tryb kreatora (266)
- Niemodalne arkusze właściwości (270)
- Własne kreatory App Wizard (275)
- Tworzenie kreatora (277)
- Dostosowywanie projektu kreatora (278)
- Tworzenie projektu (279)
- Inne opcje (281)
- Dalsze modyfikacje (282)
- Debuggowanie kreatorów (286)
- Kolejne pomysły na kreatory (287)
- Podsumowanie (287)
Praktyczny przewodnik Arkusze właściwości i kreatory (289)
- Tworzenie arkusza właściwości (289)
- Tworzenie kreatora (290)
- Korzystanie z pojedynczego szablonu (290)
- Niemodalne arkusze właściwości (291)
- Tworzenie własnych kreatorów AppWizard (291)
Rozdział 7. Biblioteki DLL i MFC (293)
- Proces łączenia (294)
- Zagadnienia dotyczące języków programowania (295)
- Korzystanie ze zwykłych DLL-i (295)
- Tworzenie zwykłego DLL-a (297)
- Główny plik (298)
- Eksportowanie funkcji (300)
- Zmienne prywatne i dzielone (302)
- DLL-e MFC (304)
- A co z DLL-ami OLE (lub ActiveX)? (307)
- Posumowanie (308)
Praktyczny przewodnik Biblioteki DLL i MFC (309)
- Wyznaczanie DLL-i używanych przez program oraz funkcji eksportowanych przez DLL-a (309)
- Łączenie w czasie budowy kodu (309)
- Łączenie w czasie wykonywania programu (310)
- Tworzenie DLL-a (310)
- Eksportowanie funkcji i danych (310)
- Tworzenie DLL-i rozszerzających MFC (311)
- Optymalizowanie adresu ładowania DLL-a (311)
Rozdział 8. ActiveX (313)
- Czym jest obiekt ActiveX? (315)
- ActiveX i programowanie zorientowane obiektowo (316)
- Kapsułkowanie ActiveX (316)
- Ponowne wykorzystanie kodu w obiektach ActiveX (317)
- Polimorfizm ActiveX (318)
- Zabawa z interfejsami (318)
- Właściwości (319)
- Metody (319)
- Zdarzenia (319)
- Nazwy i numery (319)
- ActiveX i MFC (320)
- MFC i kontrolki ActiveX (327)
- Korzystanie z ClassWizarda (328)
- Samodzielnie tworzony kod (330)
- Dodawanie właściwości (330)
- Korzystanie z właściwości otoczenia (331)
- Dodawanie metod (332)
- Dodawanie zdarzeń (332)
- Dodawanie arkuszy właściwości (333)
- Analiza wygenerowanych plików (334)
- Testowanie i wykorzystanie kontrolki (334)
- Prosta kontrolka (335)
- Użycie kontrolek ActiveX (344)
- Podsumowanie (348)
Praktyczny przewodnik ActiveX (349)
- Tworzenie obiektu MFC z interfejsem IDispatch (349)
- Interpretacja identyfikatorów CLSID, PROGID oraz pozycji Rejestru (350)
- Tworzenie kontrolek ActiveX (350)
- Debuggowanie kontrolek ActiveX (351)
- Umożliwianie projektantom VB lub stron WWW inicjalizacji twoich kontrolek ActiveX (351)
- Co to jest ATL? (351)
- Dodawanie arkuszy właściwości (352)
- Używanie kontrolek ActiveX (352)
Rozdział 9. MFC i Internet (353)
- Elementarz Internetu (354)
- TCP/IP (354)
- Gniazda (355)
- Protokoły (356)
- HTTP i URL-e (356)
- ISAPI (357)
- ActiveX i Java (358)
- Gniazda MFC (358)
- CSocket i obiekty CArchive (359)
- Przejdźmy głębiej: CAsyncSocket (360)
- Blokujące wywołania (360)
- Przykład (360)
- Podstawowy szkielet programu (362)
- Własna klasa obsługi gniazda (373)
- Inne zagadnienia (374)
- Podsumowanie gniazd (374)
- Protokoły wyższego poziomu (375)
- Program LinkChecker (376)
- Inne pomysły (384)
- Obsługa Interentu przy pomocy ActiveX (384)
- Obsługa ISAPI (388)
- Plan (389)
- Połączenie obiektów (389)
- Pobieżne spojrzenie na ISAPI (396)
- Pisanie serwera HILO.DLL (398)
- Analiza DLL-a C++ (401)
- Instalacja i dystrybucja (402)
- Dalsze kierunki (404)
- Tradycyjny ISAPI MFC (404)
- Podsumowanie (408)
Praktyczny przewodnik MFC i Internet (411)
- Używanie gniazd (411)
- Używanie gniazd jako strumieni (412)
- Użycie WinInet w MFC (412)
- Kontrolka Internet Transfer (412)
- Pisanie filtrów i rozszerzeń ISAPI w MFC (412)
- Kiedy nie należy używać ISAPI (413)
- CBISAPI - Obiektowe podejście do ISAPI (414)
Rozdział 10. MFC i bazy danych (415)
- Szczegóły bazy danych (424)
- Dodawanie innych elementów (425)
- Dodawanie i usuwanie rekordów (425)
- Rezygnacja z użycia widoku (426)
- Przykładowy program (426)
- Analiza przykładu (431)
- Podsumowanie (432)
Praktyczny przewodnik MFC i bazy danych (433)
- Tworzenie aplikacji bazy danych (433)
- Wybieranie ODBC lub DAO (434)
- Przygotowanie źródła danych (434)
- Łączenie pól bazy danych ze zmiennymi rekordsetu (434)
- Łączenie zmiennych rekordsetu z elementami kontrolnymi (434)
- Usuwanie rekordów (435)
- Dodawanie i aktualizowanie rekordów (435)
- Pola przeliczane (435)
Rozdział 11. Wielowątkowość (437)
- Wątki kontra procesy (438)
- Problemy z wątkami (438)
- Wątki i MFC (439)
- Tworzenie roboczego wątku MFC (440)
- Tworzenie wątku interfejsu użytkownika MFC (440)
- Manipulowanie wątkami (441)
- Odczytywanie zwracanej wartości (443)
- Synchronizowanie wątków (443)
- Rodzaje obiektów synchronizacji (444)
- Alternatywy dla wątków (445)
- Przykładowy program (447)
- Podsumowanie (452)
Praktyczny przewodnik Wielowątkowość (453)
- Tworzenie wątku roboczego (453)
- Tworzenie wątku interfejsu użytkownika (454)
- Zamykanie wątku (454)
- Sprawianie, by okna pojawiały się na wierzchu (454)
- Sprawianie, by okna komunikatów pojawiały się na wierzchu (455)
- Zapobieganie autodestrukcji wątków (455)
- Tworzenie wstrzymanego wątku (455)
- Odczytywanie zwracanej wartości (456)
- Rodzaje obiektów synchronizacji (456)
- Oczekiwanie na obiekt synchronizacji (457)
- Oczekiwanie na wielokrotny obiekt synchronizacji (457)
- Użycie metody OnIdle (457)
Rozdział 12. Dalsze kierunki (459)
- Koniec drogi? (460)
- Rzeczy, które nadejdą (461)
- Układy scalone a pamięć rdzeniowa (461)
- Inne zasoby (462)
Dodatek A. Procedura obsługi ikon powłoki (465)
- Rodzaje rozszerzeń powłoki (466)
- Kiedy nie należy używać rozszerzeń powłoki (466)
- Parę słów o obiektach COM (467)
- Wsparcie COM w MFC (468)
- Obiekt COM krok po kroku (470)
- Szczegóły procedury obsługi ikon (471)
- I to wszystko z rozszerzeniami powłoki? (473)
Dodatek B. Przewodnik po kodzie źródłowym MFC (479)
- Prawidłowe wykorzystanie kodu źródłowego (479)
- Najdłuższa podróż... (480)
- MFC Source By Class Name (480)
- MFC Source By File Name (487)
Skorowidz (493)