Visual C++ и MFC. 2-е издание (+дискета)

А.А. Мешков, Ю. Тихомиров

ЧАСТЬ I. ОБЗОР VISUAL C++ 6

ГЛАВА 1. ЗНАКОМЬТЕСЬ - VISUAL C++ 6
ЧТО НОВОГО В ЭТОЙ ВЕРСИИ?
НАСТРОЙКИ ПРОЕКТА
Настройка опций компилятора
Настройка опций компоновщика

ГЛАВА 2. ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ
(IDE) 19


ЧАСТЬ II. ПРОГРАММИРОВАНИЕ ПОД MS WINDOWS

ГЛАВА 3. ЗНАКОМСТВО С WINDOWS
ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС
Окна, элементы управления, модальные и
немодальные блоки диалога
Ресурсы приложения
СИСТЕМА, УПРАВЛЯЕМАЯ СООБЩЕНИЯМИ
ИНТЕРФЕЙС ПРИКЛАДНОГО ПРОГРАММИРОВАНИЯ
УПРАВЛЕНИЕ ГРАФИЧЕСКИМ ВЫВОДОМ
Графические объекты
Аппаратно-независимый графический вывод
Контекст устройства
Графические режимы
Работа со шрифтами
APISHELL - ПРИМЕР ПРИЛОЖЕНИЯ

ГЛАВА 4. СТРУКТУРА ПРИЛОЖЕНИЙ ДЛЯ WINDOWS
СТАНДАРТНЫЙ ЦИКЛ ОБРАБОТКИ СООБЩЕНИЙ
ОКОННАЯ ПРОЦЕДУРА
ОСНОВНЫЕ ТИПЫ ОКОННЫХ СООБЩЕНИЙ WINDOWS
APIWin - пример приложения


ЧАСТЬ III. БИБЛИОТЕКА КЛАССОВ MICROSOFT
FOUNDATION CLASSES (MFC)

ГЛАВА 5. ОБЗОР БИБЛИОТЕКИ MFC
ИЕРАРХИЯ КЛАССОВ MFC
COBJECT - ОСНОВА ВСЕХ КЛАССОВ
КЛАССЫ, ОПРЕДЕЛЯЮЩИЕ АРХИТЕКТУРУ ПРИЛОЖЕНИЯ
Классы приложения и поддержки потоков
Классы маршрутизации команд
Классы документов
Классы шаблонов документов
ОКНА, БЛОКИ ДИАЛОГА И ЭЛЕМЕНТЫ УПРАВЛЕНИЯ
Классы фреймов окон
Классы представлений
Классы блоков диалога
Классы элементов управления
Классы панелей элементов управления
КЛАССЫ ДЛЯ ВЫВОДА НА ЭКРАН И ПЕЧАТЬ
Классы контекста устройства
Классы графических объектов
КЛАССЫ ПРОСТЫХ ТИПОВ ДАННЫХ
МАССИВЫ, СПИСКИ И АССОЦИАТИВНЫЕ СПИСКИ
Классы шаблонов массивов, списков и
ассоциативных списков
Готовые к использованию классы массивов
Готовые к использованию классы списков
Готовые к использованию классы
ассоциативных списков
КЛАССЫ ДЛЯ РАБОТЫ С ФАЙЛАМИ И БАЗАМИ ДАННЫХ
Классы файлов ввода/вывода
Классы для работы с DAO
Классы для работы с ODBC
КЛАССЫ ДЛЯ РАБОТЫ В INTERNET И СЕТЯХ
Классы ISAPI
Классы сокетов Windows
КЛАССЫ ДЛЯ РАБОТЫ С OLE
Контейнерные классы OLE
Серверные классы OLE
Классы OLE для передачи данных и
drag-and-drop
Классы автоматизации OLE
Классы, связанные с OLE
КЛАССЫ ДЛЯ ОТЛАДКИ И ОБРАБОТКИ ИСКЛЮЧЕНИЙ
Классы поддержки отладки
Классы обработки исключений

ГЛАВА 6. МАКРОСЫ, ГЛОБАЛЬНЫЕ ФУНКЦИИ И
ПЕРЕМЕННЫЕ
ТИПЫ ДАННЫХ
ПОЛУЧЕНИЕ ИНФОРМАЦИИ О ПРИЛОЖЕНИИ
МОДЕЛЬ ОБЪЕКТА ВРЕМЕНИ ВЫПОЛНЕНИЯ
ДИАГНОСТИКА ОБЪЕКТОВ
Основные макросы
ФОРМАТИРОВАНИЕ СТРОК И ОКНО СООБЩЕНИЯ


ЧАСТЬ IV. ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ
БИБЛИОТЕКИ MFC

ГЛАВА 7. ОСНОВНЫЕ СОСТАВЛЯЮЩИЕ ПРИЛОЖЕНИЯ НА
БАЗЕ БИБЛИОТЕКИ КЛАССОВ MFC
СОГЛАШЕНИЯ ОБ ИМЕНАХ MFC
ВКЛЮЧАЕМЫЕ ФАЙЛЫ
ФУНКЦИЯ WINMAIN
Класс CWinApp
МИНИМАЛЬНАЯ ПРОГРАММА ДЛЯ WINDOWS
РЕГИСТРАЦИЯ КЛАССА ОКНА
СОЗДАНИЕ ОКНА

ГЛАВА 8. ОБРАБОТКА СООБЩЕНИЙ В БИБЛИОТЕКЕ
КЛАССОВ MFC
ЦИКЛ ОБРАБОТКИ СООБЩЕНИЙ MFC
КАТЕГОРИИ СООБЩЕНИЙ
КАРТА СООБЩЕНИЙ
Компоненты карты сообщений
КЛАСС CCMDTARGET
СТАНДАРТНЫЙ МАРШРУТ КОМАНДЫ
Команды обновления и класс CCmdUI
ФУНКЦИИ ДЛЯ РАБОТЫ С СООБЩЕНИЯМИ


ЧАСТЬ V. СОЗДАНИЕ SDI- И MDI-ПРИЛОЖЕНИЙ НА
БАЗЕ БИБЛИОТЕКИ MFC

ГЛАВА 9. КЛАССЫ ОКОН БИБЛИОТЕКИ MFC
ОКНА, ОПРЕДЕЛЕННЫЕ В ОС WINDOWS
КЛАСС CWND
КЛАСС CFRAMEWND
СОЗДАНИЕ ОКНА И БИБЛИОТЕКА MFC
Создание главного окна SDI-приложения
Создание дочерних окон
Ограничение размеров окна
Функция GetSystemMetrics
Ограничение доступа к окну

ГЛАВА 10. СОЗДАНИЕ МНОГОДОКУМЕНТНЫХ
ПРИЛОЖЕНИЙ
КЛАСС CMDIFRAMEWND
КЛАСС CMDICHILDWND
MDI - ПРИМЕР ПРИЛОЖЕНИЯ
Обработка команд меню
Unicode
Обработка команд меню (продолжение)
Обработка сообщения WM_PAINT


ЧАСТЬ VI. ЭЛЕМЕНТЫ ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ

ГЛАВА 11. ПАНЕЛИ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ
КЛАСС CCONTROLBAR
КЛАСС CTOOLBAR
КЛАСС CTOOLBARCTRL
КЛАСС CSTATUSBAR
КЛАСС CSTATUSBARCTRL
КЛАСС CDIALOGBAR
КЛАСС CREBAR
КЛАСС CREBARCTRL
CONTROLBARS - ПРИМЕР ПРИЛОЖЕНИЯ

ГЛАВА 12. МЕНЮ
ОСНОВНЫЕ ТИПЫ МЕНЮ
КЛАСС CMENU
СОЗДАНИЕ МЕНЮ НА ОСНОВЕ ШАБЛОНА
ДИНАМИЧЕСКОЕ СОЗДАНИЕ МЕНЮ
Динамическое изменение меню
Системное меню
Контекстное меню
Создание собственных маркеров состояния
Самоотображение элементов меню

ГЛАВА 13. АКСЕЛЕРАТОРЫ, ГРАФИЧЕСКИЕ И ДРУГИЕ
РЕСУРСЫ
АКСЕЛЕРАТОРЫ
ГРАФИЧЕСКИЕ РЕСУРСЫ
СТРОКОВЫЕ РЕСУРСЫ
РЕСУРСЫ, ОПРЕДЕЛЯЕМЫЕ ПРОГРАММИСТОМ


ЧАСТЬ VII. БЛОКИ ДИАЛОГА

ГЛАВА 14. МОДАЛЬНЫЕ И НЕМОДАЛЬНЫЕ БЛОКИ
ДИАЛОГА
КЛАСС CDIALOG
TEMPLATE - ПРИМЕР ПРИЛОЖЕНИЯ
БЛОК ДИАЛОГА В КАЧЕСТВЕ ГЛАВНОГО ОКНА
ПРИЛОЖЕНИЯ
ОБМЕН ДАННЫМИ С БЛОКОМ ДИАЛОГА
СОЗДАНИЕ БЛОКА ДИАЛОГА НА ОСНОВЕ ШАБЛОНА В
ПАМЯТИ

ГЛАВА 15. СТАНДАРТНЫЕ БЛОКИ ДИАЛОГА
КЛАСС CFILEDIALOG
КЛАСС CCOLORDIALOG
КЛАСС CFONTDIALOG
КЛАСС CFINDREPLACEDIALOG
КЛАСС CPRINTDIALOG
КЛАСС CPAGESETUPDIALOG


ЧАСТЬ VIII. ГРАФИЧЕСКИЙ ИНТЕРФЕЙС УСТРОЙСТВ
(GDI)

ГЛАВА 16. КЛАССЫ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА
КОНТЕКСТЫ УСТРОЙСТВ
ГРАФИЧЕСКИЕ ОБЪЕКТЫ

ГЛАВА 17. КЛАССЫ КОНТЕКСТОВ УСТРОЙСТВ
КЛАСС CDC
Создание объекта класса и его связь с
контекстом устройства
Настройка процесса рисования
Режимы отображения
Функции рисования
Отображение битовых массивов
Управление выводом текста
Дополнительные функции

ГЛАВА 18. КЛАССЫ ГРАФИЧЕСКИХ ОБЪЕКТОВ
КЛАСС CGDIOBJECT
КАРАНДАШ (КЛАСС CPEN)
КИСТЬ (КЛАСС CBRUSH)
ШРИФТ (КЛАСС CFONT)
БИТОВЫЙ МАССИВ (КЛАСС CBITMAP)
РЕГИОН (КЛАСС CRGN)
Создание регионов
Комбинирование регионов
PQCLOCK - ПРИМЕР ПРИЛОЖЕНИЯ
Класс приложения
Класс окна

ЧАСТЬ IX. АРХИТЕКТУРА
"ДОКУМЕНТ/ПРЕДСТАВЛЕНИЕ" (DOCUMENT/VIEW)

ГЛАВА 19. ОСНОВНЫЕ ПОЛОЖЕНИЯ
МЕСТО ОБЪЕКТА-ПРИЛОЖЕНИЯ В АРХИТЕКТУРЕ
"ДОКУМЕНТ/ПРЕДСТАВЛЕНИЕ"
Класс CDocTemplate
Класс CSingleDocTemplate
Класс CMultiDocTemplate 522
РОЛЬ ФРЕЙМОВ В АРХИТЕКТУРЕ
"ДОКУМЕНТ/ПРЕДСТАВЛЕНИЕ"
СЕРИАЛИЗАЦИЯ
Класс CArchive

ГЛАВА 20. ДОКУМЕНТ И ЕГО ПРЕДСТАВЛЕНИЯ
ДОКУМЕНТЫ
Класс CDocument
ПРЕДСТАВЛЕНИЯ
Класс CView
Класс CCtrlView
Класс CEditView
Классы CListView и CTreeView
Класс CScrollView
Класс CSplitterWnd

ГЛАВА 21. ПЕЧАТЬ И ПРЕДВАРИТЕЛЬНЫЙ ПРОСМОТР
ДОКУМЕНТОВ
ВЫБОР И НАСТРОЙКА ПАРАМЕТРОВ ПРИНТЕРА
СОЗДАНИЕ КОНТЕКСТА УСТРОЙСТВА
ПЕЧАТЬ ДОКУМЕНТОВ И БИБЛИОТЕКА MFC
ПРЕДВАРИТЕЛЬНЫЙ ПРОСМОТР ДОКУМЕНТА


ЧАСТЬ X. ЭЛЕМЕНТЫ УПРАВЛЕНИЯ

ГЛАВА 22. ОБЗОР СТАНДАРТНЫХ ЭЛЕМЕНТОВ
УПРАВЛЕНИЯ
СОЗДАНИЕ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ
Создание элементов управления в редакторе
ресурсов
Создание элементов управления в тексте
приложения

ГЛАВА 23. КЛАССЫ СТАНДАРТНЫХ ЭЛЕМЕНТОВ
УПРАВЛЕНИЯ
СТАТИЧЕСКИЕ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ
Создание
Отображение битового массива
Отображение значка
Отображение курсора
Отображение расширенных метафайлов
Изменение цвета
КНОПКИ
Создание
Определение и изменение текущего состояния
кнопок
Определение и изменение стиля кнопки
Назначение изображений
Переопределяемые функции
ПРОСТЕЙШИЙ ТЕКСТОВЫЙ РЕДАКТОР
Инициализация
Выделение текста
Работа со строками
Работа с блоками текста
Параметры и флаги
Дополнительные функции
СПИСОК
Инициализация
Изменение параметров списка
Функции для работы с содержимым списка
Операции над элементами списка
Переопределяемые функции
Пример самоотображаемого списка
КОМБИНИРОВАННЫЙ СПИСОК
Инициализация
Основные операции с комбинированным списком
Операции со строками и виртуальные функции
ПОЛОСА ПРОКРУТКИ
Создание
Работа с полосой прокрутки

ГЛАВА 24. КЛАССЫ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ С
РАСШИРЕННЫМИ ВОЗМОЖНОСТЯМИ
КНОПКИ С НАНЕСЕННЫМ БИТОВЫМ ИЗОБРАЖЕНИЕМ
Кнопки в блоке диалога
Кнопки, созданные программным путем
Функции класса
СПИСОК, ИМЕЮЩИЙ ФЛАЖКИ
Инициализация
Функции для работы с расширенным списком
Виртуальные функции
КОМБИНИРОВАННЫЙ СПИСОК С ПОДДЕРЖКОЙ СПИСКА
ОБРАЗОВ
Создание комбинированного списка
Основные операции
Функции работы с атрибутами
СПИСОК С ВОЗМОЖНОСТЬЮ ПЕРЕТАСКИВАНИЯ
ЭЛЕМЕНТОВ
Ограничения на использование
Создание списка
Функции, предназначенные для перемещения
элементов
Методика обхода ограничений
Реализация копирования элементов списка

ГЛАВА 25. ВСПОМОГАТЕЛЬНЫЕ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ
ПРОСМОТР ВИДЕОКЛИПОВ
Элемент управления "анимация"
Класс CAnimateCtrl
Уведомления
"ГОРЯЧАЯ КЛАВИША"
Глобальные "горячие клавиши"
Поточно-ориентированные "горячие клавиши"
Пример использования класса CHotKeyCtrl
ИНДИКАТОР
Использование индикатора в панели диалога
ЛИНЕЙКА С ПОЛЗУНКОМ
Уведомления
Создание элемента управления
Параметры элемента управления
Положение меток
Положение ползунка
СЧЕТЧИК
Уведомления
Автоматическое изменение
Создание счетчика
Параметры элемента управления
ВСПЛЫВАЮЩАЯ ПОДСКАЗКА
Оконная поддержка
Возвращаемся к классу CToolTipCtrl

ГЛАВА 26. КОМПЛЕКСНЫЕ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ
СПИСОК ИЗОБРАЖЕНИЙ
Создание списка
Изменение содержимого списка
Рисование изображений
Перемещение изображений
Информация о списке
ЗАГОЛОВОК
Создание элемента заголовка
Атрибуты элементов заголовка
Обработка извещений элемента заголовка
Элемент заголовка, определяемый
пользователем
ПРОСМОТР СПИСКА
Режимы вывода
Создание просмотра списка
Работа со столбцами
Параметры просмотра списка
Функции для работы со списком в целом
Рабочие области просмотра списка
Списки изображений
Виртуальные списки
Основные и дополнительные поля
Записи по запросу
Поиск и сортировка записей
Редактирование надписей записей
Обработка уведомлений
Просмотр списка с возможностью перемещения
записей
Переопределяемые функции
ListCtrl - пример приложения
ПРОСМОТР ДЕРЕВА
Создание просмотра дерева
Списки изображений
Изменение содержимого дерева
Поиск и сортировка записей дерева
Обработка уведомлений
КЛАСС CMONTHCALCTRL
Обработка уведомлений
КЛАСС CDATETIMECTRL
Обработка уведомлений

ГЛАВА 27. РАСШИРЕННЫЙ ТЕКСТОВЫЙ РЕДАКТОР
КЛАСС CRICHEDITCTRL
Создание объекта класса CRichEditCtrl
Изменение параметров редактора
Настройка окна редактора
Размер содержимого редактора
Работа со строками
Выделение содержимого редактора
Работа с буфером обмена
Печать содержимого редактора
Уведомляющие сообщения
Расширенные возможности
РАСШИРЕННЫЙ РЕДАКТОР В РАМКАХ АРХИТЕКТУРЫ
"ДОКУМЕНТ/ПРЕДСТАВЛЕНИЕ"
Класс CRichEditView
Класс CRichEditDoc

ГЛАВА 28. НАБОРЫ СВОЙСТВ
СОЗДАНИЕ НАБОРА СВОЙСТВ
Создание страницы свойств
Создание объекта "набор свойств"
Настройка окна набора свойств
Добавление страниц
Создание модального окна свойств
Создание немодального окна набора свойств
Обмен данными
Операция Apply
КЛАСС CPROPERTYSHEET
Операции над набором свойств
Вспомогательные функции
Изменение параметров отображения
КЛАСС CPROPERTYSHEETEX
КЛАСС CPROPERTYPAGE
Создание страницы свойств
Переопределяемые функции
КЛАСС CPROPERTYPAGEEX
ВКЛАДКИ
Создание вкладок
Вспомогательные функции
Изменение вкладок
МАСТЕРА
Создание мастеров
Переопределяемые функции


ЧАСТЬ XI. ПОДДЕРЖКА МНОГОЗАДАЧНОСТИ

ГЛАВА 29. ВЫТЕСНЯЮЩАЯ МНОГОЗАДАЧНОСТЬ
ОБЩИЕ ПОЛОЖЕНИЯ
КЛАССЫ ПРОЦЕССОВ И ПРИОРИТЕТЫ ПОТОКОВ
Класс Idle
Класс Normal
Класс High
Класс Realtime
Относительные приоритеты потоков
ВЗАИМОДЕЙСТВИЕ ПРОГРАММ
СИНХРОНИЗАЦИЯ ПОТОКОВ
Критические секции
Ожидающие функции
Объекты синхронизации
БИБЛИОТЕКА MFC И МНОГОЗАДАЧНОСТЬ
Класс и функции для поддержки
многопотоковых приложений
Классы и функции для поддержки
взаимодействия потоков и процессов

ГЛАВА 30. СОЗДАНИЕ ПОТОКОВ
ПРИМЕР СОЗДАНИЯ НАСЛЕДУЕМЫХ ПОТОКОВ
СОЗДАНИЕ ИНТЕРФЕЙСНЫХ ПОТОКОВ
КЛАСС CWINTHREAD
СОЗДАНИЕ ИНТЕРФЕЙСНЫХ ПОТОКОВ (ПРОДОЛЖЕНИЕ)
CUIThreadApp - класс всего приложения
CUIThreadFrame - класс основного окна
CLineThread - класс дополнительного потока
CLineWnd - класс окна "бегущая строка"
CEditWnd - класс окна редактора
СОЗДАНИЕ РАБОЧИХ ПОТОКОВ
Управляющая функция и ее параметр
Пример управляющей функции
ЗАВЕРШЕНИЕ ПОТОКОВ
Нормальное завершение
Экстренное завершение
Код завершения
Права доступа к потоку

ГЛАВА 31. ВЗАИМОДЕЙСТВИЕ ПОТОКОВ
ВЗАИМОИСКЛЮЧЕНИЕ ДОСТУПА
Организация доступа к объектам классов MFC
Списки дескрипторов объектов Windows
Graphics - пример приложения
ИСПОЛЬЗОВАНИЕ КЛАССОВ ОБЪЕКТОВ
СИНХРОНИЗАЦИИ
Создание класса разделяемых объектов
Использование классов объектов
синхронизации
КЛАССЫ ОБЪЕКТОВ СИНХРОНИЗАЦИИ
Класс CSyncObject - базовый класс объектов
синхронизации
Критическая секция (класс CCriticalSection)
Взаимоисключение (класс CMutex) 926
Событие (класс CEvent)
Семафор (класс CSemaphore)
КЛАССЫ, ОБЕСПЕЧИВАЮЩИЕ СИНХРОНИЗАЦИЮ
TERMINAL - МНОГОПОТОКОВОЕ ПРИЛОЖЕНИЕ,
ВЗАИМОДЕЙСТВУЮЩЕЕ С ПОСЛЕДОВАТЕЛЬНЫМ ПОРТОМ
Класс блока диалога и функции потоков
Окно редактора
Работа с последовательным портом
Кольцевой буфер общего доступа


ЧАСТЬ XII. INTERNET И БАЗЫ ДАННЫХ

ГЛАВА 32. РАБОТА С ИНФОРМАЦИОННЫМ СЕРВЕРОМ
INTERNET
ОБЗОР ISAPI (API СЕРВЕРА INTERNET)
КЛАССЫ ISAPI
Класс CHttpServer
Класс CHttpServerContext
Карта разбора
СОЗДАНИЕ РАСШИРЕНИЯ ISAPI

ГЛАВА 33. КЛАССЫ БИБЛИОТЕКИ MFC ДЛЯ РАБОТЫ С
БАЗАМИ ДАННЫХ
КЛАССЫ ДЛЯ РАБОТЫ С ODBC
Класс CDatabase
Класс CRecordset

ГЛАВА 34. ИСПОЛЬЗОВАНИЕ РАСШИРЕНИЯ ISAPI

ОПИСАНИЕ СОПРОВОДИТЕЛЬНОЙ ДИСКЕТЫ
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ