okladka
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)
    • Kontrolka Transfer (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)