Введение


Часть I. Ядро MFC

Глава 1. Архитектура MFC
Краткая история библиотеки MFC
Иерархия MFC-классов
Класс CObject
Класс CCmdTarget
Класс CWinApp
Класс CWnd
Класс CFrameWnd
Класс CView
Класс CDocument
Резюме

Глава 2. Диалоговые окна, элементы управления и взаимосвязь данных в среде MFC
Создание приложения
Запуск и применение MFC-мастера AppWizard
Программный код, генерируемый мастером AppWizard
Видоизменение приложения
Введение в диалоговое окно элементов управления
Инициализация
Использование элементов управления диалогового окна
Контекстные подсказки по инструментам
Разрешение вывода инструментальных подсказок
Вывод текста
Обмен диалоговыми данными
Стандартный DDX-обмен
Метод UpdateData
Использование стандартных диалоговых окон
Диалоговое окно открытия/сохранения файла
Окно выбора цвета
Окно выбора шрифта
Диалоговое окно печати
Резюме

Глава 3. Общие элементы управления Windows
Инициализация и применение общих элементов управления
Уведомления для общих элементов управления Windows
Структура уведомляющего сообщения
Обзор процесса уведомления
Более совершенная схема обработки уведомлений
Указание пределов уведомления с помощью макрокоманды ON_NOTIFY_RANGE
Класс CHotKeyCtrl клавиш ускоренного вызова команд
Методы класса CHotKeyCtrl
Создание и инициализация объекта CHotKeyCtrl
Применение элемента управления для клавиш ускоренного вызова команд
Счетчики: класс CSpinButtonCtrl
Стили счетчиков
Сообщения класса CSpinButtonCtrl
Методы класса CSpinButtonCtrl
Создание и инициализация счетчика
Пример программы SPIN1
Бегунки: класс CSliderCtrl
Стили бегунков
Сообщения класса CSliderCtr!
Методы класса CSliderCtrl
Создание и инициализация бегунка
Пример программы, использующей бегунки (SLIDER1)
Демонстрационная программа SLIDER1
Индикатор выполнения: класс CProgressCtrl
Методы класса CProgressCtrt
Создание и инициализация объекта CProgressCtrl
Использование индикатора выполнения процесса
Список изображений: класс CImageList
Методы класса CImageList
Создание и инициализация элемента управления CImageList
Область просмотра списка: класс CListCtrl
Стили элемента управления List View
Списки изображений и элемент управления List View
Пункты и подпункты списка в элементе управления List View
Уведомляющие сообщения элемента управления List View
Создание и инициализация объекта CListCtrl
Использование элемента управления List View
Окно просмотра древовидной структуры: класс CTreeCtrl
Стили окна просмотра древовидной структуры
Уведомляющие сообщения окна просмотра древовидной структуры
Методы класса CTreeCtrl
Создание и инициализация окна просмотра древовидной структуры
Использование объекта CTreeCtrl
Пример программы TREELIST.EXE
Закладки: класс CTabCtrl
Стили закладок
Уведомляющие сообщения закладки
Методы класса CTabCtrl
Структура элементов закладки (ТС_IТЕМ)
Создание и инициализация закладки
Использование закладки
Элементы управления анимацией: класс CAnimateCtri
Стили элемента управления анимацией
Уведомляющие сообщения элемента управления анимацией
Методы класса CAnimateCtrl
Создание и инициализация элемента управления анимацией
Использование элемента управления анимацией
Класс CRichEditCtrl элементов управления редактированием форматированного текста
Стили элемента управления редактированием форматированного текста
Структура формата символов (CHARFORMAT)
Структура для формата абзаца (PARAFORMAT)
Методы класса CRichEditCtrl
Методы класса CRichEditCtrl, связанные со строками
Методы класса CRichEditCtrl, предназначенные для выделения текста
Методы класса CRichEditCtrl, предназначенные для форматирования текста
Методы класса CRichEditCtrl, предназначенные для редактирования
Методы класса CRichEditCtrl, предназначенные для взаимодействия с буфером обмена
Методы общего назначения класса CRichEditCtrl
Создание и инициализация элемента управления редактированием форматированного текста
Использование элемента управления редактированием форматированного текста
Резюме

Глава 4. Графические операции, контексты устройств, растровые изображения и шрифты
Контексты устройств
Интерфейс графического устройства
Организация MFC-оболочек
MFC-классы контекстов устройств
Базовый класс: CDC
Рисование с помощью класса CPaintDC
Управление рабочей областью окна с помощью класса CCIientDC
Управление базовыми окнами приложений с помощью класса CWindowDC
Графические объекты Windows
Перья: класс СРеп
Кисти: класс CBrush
Шрифты: класс CFont
Класс растровых изображений: CBitmap
Палитры: класс CPalette
Области: класс CRgn
Системы координат интерфейса GDI
Режимы логического отображения
Векторная графика
Методы, предназначенные для выполнения графических операций рисования
Прямые и ломаные линии
Прямоугольники
Области
Многоугольники
Эллипсы
Кривые Безье
Шрифты и текст
Характеристики шрифта
Структура TEXTMETRIC
Структура LOGFONT
Создание шрифта
Отображение текста
Пример программы, применяющей методы векторной графики и вывода текста (VECTEXT1.EXE)
Растровая графика
Именованные растровые операции (ROP)
Растры
Зависимые от устройства растровые изображения
Независимые от устройства растровые изображения
Класс CBitmap
Передача и изменение формы растровых изображений
Растровые ресурсы
Присоединение ресурсов к исполняемому файлу
Извлечение ресурсов изображений из исполняемого файла
Пример программы ВIТМАР1, иллюстрирующей применение растровых ресурсов
Резюме

Глава 5. Разработка специализированных элементов управления
Сопоставление классов Windows и C++
Поле редактирования с проверкой правильности содержимого
Статический элемент управления CClockControl
Характеристики элемента управления
Рисование циферблата
Расположение стрелок
Рисование стрелок
Установка времени
Скрытые препятствия при создании подклассов для стандартных элементов управления
Элемент управления CHyperlink
Стратегия реализации
Обработка шрифта
Рисование окна
Управление указателем мыши
Получение событий, связанных с мышью
Ввод с клавиатуры
Запуск гиперссылки
Нетривиальные аспекты разработки специализированных элементов управления
Ограничения процесса создания подклассов
Уведомления
Применение редактора ресурсов совместно со специализированными классами
Резюме

Глава 6. Объект MFC-приложения, маршрутизация сообщений и обработка во время простоя
Объект MFC-приложения
Срок действия объекта CWinApp и приложения
Компоненты данных класса CWinApp
Компонентные функции класса CWinApp
Функция Initlnstance — специализированная инициализация приложения
Возможности функции InitInstance
Поддержка OLE-контейнера
Трехмерный вид диалогового окна для Windows NT 3,5x
Использование системного реестра
Список последних использовавшихся файлов
Документ-представление с интерфейсами SDI и MDI
Создание основного окна приложения
Поддержка автоматизации
Поддержка элемента управления, предназначенного для редактирования форматированного текста
Обработка командной строки
Маршрутизация сообщений, карты отображения сообщений и категории сообщений
Маршрутизация сообщений
Функция PreTranslateMessage
Карты отображения сообщений
Обработка во время простоя
Функция OnIdle
Обработка во время простоя в случае с диалоговыми приложениями
Компонент Splash Screen
Резюме


Часть II. Документы и представления, которые используются в приложениях

Глава 7. Архитектура документ/представление
Документы, окна и представления
Шаблоны документа
Создание новых документов
Открытие новых файлов
Сопоставление шаблонов одно- и многодокументного интерфейсов
Представления
Класс CView
Класс CScroliView
Класс CFormView
Классы, предназначенные для работы с базами данных
Представления элементов управления
Изменение представлений в однодокументном интерфейсе
Применение многодокументного интерфейса
Резюме

Глава 8. Расширение пользовательского интерфейса
Реакция на действия пользователя
Сообщения от клавиатуры
Обработка сообщений клавиатуры
Сообщения мыши
Обработка сообщений мыши
Пользовательские интерфейсы и мастер AppWizard
Создание меню
Получение обычных и контекстных меню
Добавление пунктов меню
Применение всплывающих контекстных меню
Применение панелей элементов
Применение панелей инструментов и комбинированных панелей
Применение панелей состояния
Отображение и скрытие панелей элементов управления
Поддержка контекстных подсказок
Обновление пользовательского интерфейса
Листы свойств и мастера
Поддержка листов свойств и мастеров средствами MFC
Создание простейшего мастера
Разделение области просмотра
Резюме

Глава 9. Операции печати
Основные принципы выполнения операций печати
Печать с помощью MFC-функций
Печать в окне представления
Объект CPrintInfo
Команды меню печати
Операции печати и режимы отображения GDI-интерфейса
Печать с сохранением масштаба
Ресурсы приложения
Класс приложения
Класс представления
Разбивка документа на страницы
Распечатка многостраничных документов с известным количеством страниц
Распечатка документа с неизвестным количеством страниц
Печать номеров страниц
Остановка и отмена заданий печати
Остановка процесса печати с помощью функции OnPrepareDCQ
Остановка процесса печати с помощью функции OnPrintQ
Резюме


Часть III. MFC-программирование с применением технологии СОМ

Глава 10. Технология СОМ
Немного истории
Интерфейсы, объекты и методы
Немного терминологии
Пример из реальной жизни
Интерфейс IUnknown
Серверы, клиенты и классы
Среда времени выполнения
Определение фабрики класса
Как СОМ-объекты используются повторно
Транспортировка и создание потоков
Транспортировка
Создание потоков
СОМ, OLE и автоматизация
Интерфейс IDispatch
Серверы автоматизации, объекты и контроллеры
Одновременная поддержка интерфейсов IDispatch и IUnknown
Устойчивость данных СОМ
Структурированное сохранение данных
Идентификация данных (Моникеры)
Передача данных
Унифицированная передача данных — UDT
Связываемые объекты
Технология DCOM
Создание объектов
Вызов методов
Вопросы безопасности информации
Некоторая важная информация
Тип BSTR
Тип SAFEARRAY
Тип HRESULT
Тип VARIANT
Резюме

Глава 11. СОМ и MFC
Понятие глобальных Afx-функций
Управление временем жизни приложения
Функция AfxOleGetMessageFilter
Функция AfxOleGetUserCtrl
Управление элементами управления программы-клиента
Управление точками соединения
Регистрация элементов управления
Исключения
Инициализация
Лицензирование
Информация о типе данных
Обзор OLE-макрокоманд
Фабрики класса
Общие команды для классов клиента и контейнера
Стабильность свойств элемента управления
Обмен данных в диалоговых окнах
Карты диспетчеризации
Карты событий
Отображение данных для страниц свойств
Страницы свойств
Доступ к библиотеке типов
MFC и категории OLE-классов
Активный документ
OLE-автоматизация
Диалоговые окна общего назначения в технологии OLE
Контейнер
Элементы управления
Технология drag-and-drop (универсальная передача данных)
Серверы документов
Поддержка
Резюме

Глава 12. OLE-серверы в MFC
Серверы документов
Типы серверов
Полнофункциональный сервер
Активный документ
Контейнер/сервер
Мини-сервер
Разработка сервера документов
OLE-документы
Активные документы
Формирование сервера активных документов
Сохранение данных
Отображение окна просмотра
Серверы автоматизации
Интерфейс IIDispatch
Метод GetIDsOfNames
Метод GetTypelnfo
Метод GetTypelnfoCount
Метод Invoke
ODL-интерфейсы, производные от IDispatch
Вызов методов с помощью интерфейса IDispatch
Метод GetIDsOfNames
Методы, предназначенные для получения информации о типе
Метод Invoke
Отличие интерфейсов диспетчеризации от обычных интерфейсов
Доступ к серверам автоматизации в C++, осуществляемый с помощью интерфейса IDispatch.
Двойные интерфейсы
Тип данных Variant
Создание сервера автоматизации с помощью MFC
Тип сервера
Объявление и определение дополнительных диспинтерфейсов
Добавление новых методов и свойств
Резюме

Глава 13. OLE-клиенты в MFC
Интерфейс IDispatch и его роль в технологии автоматизации
Объявление интерфейса для сервера автоматизации
IDL и ATL
ODL и MFC
Двойные интерфейсы
MFC и автоматизация
Контроллер автоматизации
Подключение к серверу
Основные принципы создания сервера автоматизации
Создание контроллера
Использование класса COIeDispatchDriver
Использование директивы #import
Удаленная автоматизация
Резюме

Глава 14. Элементы управления ActiveX
Стратегия разработки
MFC
ATL
MFC и ATL
Разработка элемента управления
Два облика элемента управления
Время выполнения
Время разработки
Подклассы элементов управления
MFC
ATL
Категории компонентов
Интерфейс ICatRegister
Интерфейс ICatlnformation
Методы, свойства и события
Свойства
Методы
События
Страницы свойств
Создание страницы свойств в среде ATL
Создание страницы свойств в среде MFC
Регистрация компонента
Сценарии регистрации
Регистрация и элементы управления
Пример создания элемента управления в среде MFC
Определение интерфейса
Преобразование программы в среду ATL
Резюме

Глава 15. Создание контейнеров элементов управления ActiveX
Контейнер активных документов
Сохранение информации
Объекты Site
Активизация по месту
Расширения документа
Создание простейшего сервера активных документов
Элементы управления
Добавление возможности включения элементов управления ActiveX в существующий проект
Контейнер элементов управления ActiveX
Встраивание элемента управления и его события
Резюме

Глава 16. Использование MFC и ATL
Что такое ATL и почему это столь важно для программирования в MFC?
Поддержка СОМ в ATL для приложений MFC
Интеллектуальные СОМ-указатепи
Дополнительная поддержка СОМ в ATL
Расширенная поддержка ATL для приложений MFC
Начнем с приложения MFC
Добавьте необходимую поддержку ATL
Резюме

Глава 17. Сценарии в приложении MFC
Основы разработки сценариев
Интерфейсы сценариев
Дуальные интерфейсы
Объектные модели
Реализация приложения с поддержкой сценариев
Реализация объектов
Резюме


Часть IV. Программирование баз данных в MFC

Глава 18. Обработка баз данных в MFC
Понятие реляционных баз данных
Таблицы
Столбцы
Записи
Курсоры
Транзакции
Хранение и получение данных
SELECT
INSERT
DELETE
UPDATE
Механизмы соединения с базами данных
ODBC
DAO
Какой методологией воспользоваться вам?
ODBC/MFC
CDatabase
CRecordset
DAO
CDaoWorkspace
CDaoDatabase
CDaoRecordset
CDaoTableDef
CDaoQueryDef
Резюме

Глава 19. Расширенная поддержка баз данных
Подход СОМ
OLE DB
ADO
Чем же воспользоваться?
Создание абонентов OLE DB с использованием классов оболочки ATL
CDataSource
CSession
Посредники
Наборы строк
Доступ к источникам данных
Использование интерфейсов C++ ADO
ADOConnection
ADORecordset
ADOCommand
ADOField
ADOProperty
ADOParameter
ADOError
Резюме


Часть V. Вспомогательные MFC-классы

Глава 20. Строки и коллекции
Строки и строковые классы
Содержимое класса CString
Практическое применение класса CString
Резюме по классу CString
Коллекции
Организация классов коллекций
Шаблонные коллекции
Приложение UNL_MultiEd
Обзор приложения UNL_MultiEd
Применение технологии STL
Резюме

Глава 21. MFC и файловые операции ввода/вывода
Класс CFile
Выполнение операций с файлами с помощью класса CFile
Содержимое класса CFile
Класс CStdioFile
Класс CMemFile
Класс CSharedFiie
Класс CFileDialog
Пользовательские классы CFileDialog
Практическое применение классов CFile and CFileDiatog
Открытие файла
Классический подход
Понятие потока
Резюме

Глава 22. Исключения
Исключения. Зачем они нужны
Типы исключений
Подпрограммы обработки структурированных исключений
Вложение подпрограмм обработки структурированных исключений
Возбуждение структурированных исключений
Восстановление после обработки исключения С++-исключения
Определение класса С++-исключений
МFC-исключения
MFC-классы, производные от CException
Класс CMemoryException
Класс CNotSupportedException
Класс CArcriiveException
Класс CFiIeException
Класс CResourceException
Класс COIeException
Класс CDbException
Класс COIeDispatchException
Класс CUserException
Класс CDaoException
Класс CInternetException
Создание собственных объектов-исключений, производных от MFC-классов
Удаление исключений
Применение MFC-макрокоманд обработки исключений
Смешивание исключений
Резюме


Часть VI. MFC и Internet

Глава 23. MFC и технология DHTML
Технология DHTML, браузер MSIE и Internet
Использование ActiveX-элемента управления Internet Explorer
Основные сведения об элементе управления Internet Explorer
Класс CHtmlView
Применение ActiveX-элемента управления Internet Explorer в диалоговом окне
Применение технологии DHTML
Объектная модель DHTML
СОМ-интерфейсы DHTML-объектов
Резюме

Глава 24. Программирование с применением класса CSocket
Принципы организации сетевых коммуникаций
Гнезда, порты и адреса
Интерфейс Wibsock и MFC
Инициализация среды интерфейса Winsock
Создание гнезда
Открытие соединения
Отправка и прием сообщений
Закрытие сетевого соединения
События, связанные с гнездами
Управление процессом генерации событий
Обнаружение ошибок
Получение информации о гнезде
Гнезда и сериализация ввода/вывода
Создание сетевого приложения
Создание диалоговой оболочки приложения
Внешний вид окна и операции, выполняющиеся при запуске программы
Создание экземпляра класса CAsyncSocket
Подключение приложения
Отправка и прием сообщений
Завершение соединения
Резюме

Глава 25. Программирование WinInet
Протоколы Web-приложений и WinInet
Hypertext Transfer Protocol
File Transfer Protocol
Протокол Gopher
WinInetAPI и MFC
Основы сеанса Internet
CInternetSession
CInternetFile
CInternetException
CInternetConnection
Создание простого приложения WinInet
Функциональные возможности уровня приложения
Классы HTTP
Классы FTP
Классы Gopher
Создание простого FTP-клиента
Резюме

Глава 26. Расширения ISAPI
Основные сведения об ISAPI-расширениях
Процесс создания ISAPI-расширения
Обработка запросов GET и POST
Добавление в форму дополнительных компонентов
Изменение формы
Изменение карты команд
Объявление и применение функций-обработчиков
Добавление переключателя
Остальные компоненты формы
Изменения формы
Изменение карты команд
Изменение функции-обработчика
Резюме

Глава 27. Интерфейс MAPI и MFC
Интерфейс MAPI
Приложения-клиенты
Альтернативы более высокого уровня: интерфейсы Simple MAPI и CMC
Интерфейс Simple MAPI
Интерфейс CMC
Структура MapiMessage
Структура MapiFileDesc
Ограничения MAPI-функций в среде MFC
Подключение к классу CDocument
Организация поддержки MAPI-функций в среде MFC
Метод CDocument::OnFileSendMail()
Демонстрационная программа: МАРI1.ЕХЕ
Резюме

Глава 28. Интерфейс ТАРI и MFC
Обзор
Уровень Assisted Telephony
Уровень Basic Telephony Service
Вспомогательные функции телефонии
Расширенные функции телефонии
История интерфейса ТАРI
ТАРI 1.3
TAPI 1.4
TAPI 1.5
TAPI 2
TAPI 2.1
TAPI 2.2
TAPI 3
Применение функций вспомогательной телефонии
Применение функций базовой телефонии
TAPI-функции, предназначенные для конфигурирования сеанса связи
Подключение к интерфейсу TAPI
Передача данных с помощью интерфейса ТАРI
Отключение от линии с помощью интерфейса TAPI
Завершение сеанса TAPI-связи
Резюме


Часть VII. MFC и графическое программирование

Глава 29. MFC и OpenGL
Что такое OpenGL
Основы трехмерной графики
Основные понятия и ключевые концепции
Основы математики графического программирования
Основы технологии OpenGL
Типы данных OpenGL
Соглашения по именованию функций OpenGL
Область действия функций визуализации OpenGL
Матричный стек OpenGL
Контекст визуализации OpenGL
Минимальная программа OpenGL и настраиваемые виды
Создание основного приложения MFC
Добавление собственного базового класса OpenGL
Интеграция нового класса вида в приложение
Построение трехмерной сцены
Добавление библиотек OpenGL в список ссылок проекта
Двухмерные и трехмерные модели
Разработка базовой модели
Трансформации модели
Списки отображений
Свет
Основы теории света в OpenGL
Типы света
Свойства материала объекта
Текстурное отображение
Изображения OpenGL и аппаратно-независимые растры Windows
Наложение текстуры
Спецэффекты
Альфа-смешивание
Туман
Резюме

Глава 30. MFC и DirectX
Что такое DirectX?
Просто о DirectX
Компоненты DirectX
Основы DirectX
Отличия стиля программирования СОМ от DirectX
Последовательность запуска компонентов DirectX
Основы DirectDraw
Инициализация DirectDraw
DirectDraw и палитры
Поверхности DirectDraw
Функция переключения страниц DirectDraw
DirectDraw в окне
Использование DirectDraw на практике
Поверхности и растровые изображения
Визуализация в окне
Обработка ошибок
Отключение DirectDraw
Резюме

Глава 31. Мультимедиа и MFC
Основы мультимедиа
Элемент управления Media Player технологии DirectX
Мультимедиа-форматы, поддерживаемые элементом Media Player
Внутренний мир элемента Media Player
Класс CMediaPlayer
Использование элемента управления Media Player
Воспроизведение звука
Работаем с волнами
Второе знакомство с DirectSound
Использование DirectSound для воспроизведения звуковых эффектов
Резюме


Часть VIII. Дополнительные возможности MFC

Глава 32. Системный реестр
Использование системного реестра
Конфигурация
Структура системного реестра
Программное управление реестром
API системного реестра
Учебное приложение по работе с системным реестром
Диалог редактирования системного реестра
Создание нового ключа
Удаление ключей
Удаление пары имя/значение
функции-оболочки для работы с системным реестром
Немного об установке
Резюме

Глава 33. Создание и использование DLL-файлов
Преимущества библиотек динамической компоновки
Сокращение программного кода
Модульность и пакетирование
Расширяемость
Внутренний мир AFX DLL
Экспорт классов, функций и данных
Слово об экспорте
Скорректированные имена
Экспорт классов
Что случайно попадается, то и случайно используется
Экспорт явных функций
Экспорт данных
Экспорт данных MFC
Экспорт деструктора
Экспорт файлов include из инструментария
Что следует экспортировать
Прочие элементы DLL
AfxLoadLibrary и AfxFreeLibrary
Расширяемость и многократное использование
Размещение ресурсов
Различные файлы описания модулей
Загрузка адресов и компоновщик
Резюме

Глава 34. Создание собственных мастеров
Окна свойств и страницы свойств
Классы CPropertySheet и CPropertyPage
Работа с мастером и подключение окна свойств
Создание мастера
Установка режима мастера
Подключение кнопок мастера
Вывод мастера на экран
Сообщения уведомления мастера
Учебная программа: Рассмотрим работу мастера (WIZARD1.EXE)
Создание ресурсов шаблона окна диалога страницы мастера
Создание диалогового класса для каждого ресурса диалога
Обзор страницы Welcome: класс CintroPage
Обзор страницы "О Вас": класс CPagel
Обновление информации мастера для СРаде2 и СРадеЗ
Создание и вывод мастера на экран
Резюме