		    Содержание

Предисловие					  5
С какой версией Windows работать?			  6
Для кого предназначена эта книга?			  6
Какие программные средства необходимы?		  6

1. MFC и Windows					  9
   Что такое MFC?					10
   Связь MFC и C++					11
   16-ти или 32-разрядные приложения?			11
   Какую версию MFC выбрать?			12
   Программная среда Windows			12
   Интерфейс вызовов функций в Windows		12
   Библиотеки динамической загрузки (DLL)		13
   Win 16 или Win32					13
   Интерфейс GDI					14
   Многозадачность в Windows			14
   Взаимодействие программ и Windows		15
   Основы программирования под Windows		16
   Функция WinMain()				16
   Функция окна					16
   Цикл сообщений					17
   Класс окна					17
   Специфика программ для Windows			17
   Типы данных в Windows				18
   Соглашение об использовании имен			18
   Элементы окна					20


Содержание	547


2. Основы MFC					23
   Иерархия классов MFC				24
   Функции-члены в MFC				25
   Глобальные функции в MFC			28
   Файл AFXWIN.H					28
   Каркас MFC-программы				28
   Использование файла определений			32
   Подробнее о создании масштабируемых окон		33
   Подробнее о классе CWinApp			35
   Организация исходного кода программы		36

3. Обработка сообщений				39
   Что такое сообщения?				40
   Обработка сообщений в MFC			40
   Включение макрокоманд в очередь сообщений		41
   Включение обработчиков сообщений в  
   описание класса					41
   Реализация обработчиков сообщений		42
   Подробнее о макросе BEGIN_ MESSAGE_ MAP()	42
   Реакция на нажатие клавиши			43
   Контекст устройства				47
   Обработка сообщения WM_PAINT			47
   Обработка сообщений мыши			51
   Генерация сообщения WM_PAINT			55
   Обработка сообщения WM__DESTROY		58
   Обработка сообщений таймера			58

4. Окна сообщений и меню				63
   Окна сообщений					64
   Использование функции AfxMessageBox()		67
   Работа с меню					68
   Использование ресурсов				68
   Компиляция RC-файлов				69
   Создание простого меню				69
   Включение меню в программу			72
   Обработка сообщения WM_COMMAND		72
   Реакция на выбор элементов меню			73
   Пример программы, содержащей меню		73
   Использование клавиш быстрого доступа		77
   Загрузка таблицы быстрого доступа			80
   Создание горячих клавиш				80


548	MFC: основы программирования


5. Диалоговые окна				87
   Взаимодействие между диалоговым окном и 
      пользователем					88
   Классы управления				89
   Модальные и немодальные диалоговые окна		89
   Диалоговое окно как ресурс			90
   Класс CDialog					91
   Обработка сообщений от диалоговых окон		91
   Вызов диалогового окна				92
   Закрытие диалогового окна				92
   Пример создания простого диалогового окна		92
   Файл ресурсов для диалогового окна			92
   Библиотечный файл IDS.H				94
   Файл порождаемых классов			94
   Программа					95
   Подробнее о работе программы			97
   Программное закрытие диалогового окна		98
   Инициализация диалогового окна			99
   Работа со списками				100
   Определение списка в файле ресурсов		100
   Основы работы со списками			101
   Прием идентификационных кодов списка		101
   Передача сообщений спискам			102
   Получение указателя на список			103
   Инициализация списка				103
   Пример программы работы со списком		104
   Создание поля ввода				108
   Немодальные диалоговые окна			113
   Создание немодального окна			115

6. Дополнительные элементы управления		123
   Использование контрольных переключателей		124
   Сообщения контрольного переключателя		126
   Установка и проверка состояния контрольного 
      переключателя					126
   Управление контрольными переключателями		130
   Изменение состояния переключателя		131
   Инициализация переключателя			131
   Создание статических элементов			135
   Создание селекторных кнопок			136
   Использование полосы прокрутки			142
   Создание стандартных полос прокрутки		142
   Создание независимых полос прокрутки		143
   Обработка сообщений полосы прокрутки		143
   Задание и получение диапазона полосы прокрутки	144


Содержание	549


   Задание и получение позиции ползунка		145
   Пример работы с полосами прокрутки		145
   Функции SetScrollInfoQ и GetScrollInfoQ		152
   Использование функции SetScrolllnfoQ		154
   DDX- и DDV-функции				158

7. Работа с пиктограммами, курсорами и
   растровыми изображениями			163
   Создание пиктограммы и курсора			164
   Регистрация пиктограммы и курсора			165
   Загрузка пиктограммы и курсора			166
   Кисти и стили заполнения				166
   Пример программы, использующей собственную 
      пиктограмму и курсор				167
   Использование встроенных курсоров и пиктограмм	169
   Работа с растровыми изображениями		171
   Создание растрового изображения			172
   Вывод растрового изображения на экран		172
   Пример программы работы с растровым изображением	175
   Работа с несколькими изображениями		177

8. Работа с текстом и решение проблемы перерисовки	181
   Координаты окна					182
   Задание цвета текста и фона			182
   Задание режима отображения фона			183
   Получение метрик текста				184
   Вычисление длины строки				185
   Получение системных метрик			186
   Демонстрационная программа работы с текстом	186
   Решение проблемы перерисовки			191
   Теория виртуального окна				191
   Дополнительные API-функции			192
   Создание и использование виртуального окна		193
   Создание виртуального окна			193
   Использование виртуального окна			194
   Демонстрационная программа работы с виртуальным 
      окном						196
   Изменение шрифтов				199
   Использование встроенных шрифтов			199
   Создание собственных шрифтов			204

9. Работа с графикой				213
   Система графических координат			214
   Кисти и перья					214


550	MFC: основы программирования


   Графические функции				214
   Отображение точки				214
   Рисование линий					215
   Изменение позиции текущего указателя		215
   Рисование дуг					216
   Рисование прямоугольников			216
   Рисование эллипсов и секторов			217
   Работа с перьями				217
   Создание пользовательских кистей			219
   Удаление кистей и перьев				219
   Демонстрационная программа работы с графикой	219
   Режимы отображения и области вывода		225
   Задание режима отображения			225
   Логические размеры окна				227
   Определение размеров области вывода		228
   Задание начала области вывода			228
   Пример программы работы с областью вывода и 
        режимами отображения				229

10. Общие элементы управления			237
   Подключение и инициализация общих элементов 
      управления					239
   Использование панелей инструментов		239
   Добавление кнопок в панель инструментов		241
   Добавление изображений к кнопкам			242
   Изменение размера панели инструментов		243
   Дополнительные функции класса CToolBarCtrl		244
   Пример работы с панелью инструментов		245
   Создание всплывающих подсказок			254
   Пример работы с панелью инструментов, включая 
        всплывающие подсказки        			256

11. Общие элементы управления (продолжение)		265
   Работа со стрелками				266
   Создание стрелок				266
   Сообщения, поступающие от стрелок			267
   Некоторые функции класса CSpinButtonCtrl		268
   Использование стрелок				268
   Создание поля с прокруткой			274
   Пример программы				274
   Работа с регулятором				278
   Создание регулятора				279
   Обработка сообщений регулятора			279
   Функции работы с регуляторами			280 
   Демонстрационная программа работы с регулятором 	281
   Работа с индикатором				286


Содержание	551


   Создание индикатора				286
   Функции работы с индикаторами			286
   Программа работы с индикатором			287

12. Строки состояния, закладки и окна просмотра 
          деревьев					293
   Строки состояния					294
   Создание строки состояния				294 
   Определение количества полей строки состояния 	295
   Задание текста для строки состояния			295
   Использование строки состояния			295
   Закладки					302
   Создание закладок				302
   Инициализация закладок				303
   Некоторые функции класса CTabCtrl			304
   Сообщения закладок				305
   Пример работы с закладками			305
   Использование закладок				308
   Окна просмотра деревьев				315
   Создание окна просмотра деревьев			316
   Добавление элементов в дерево			316
   Раскрытие и сворачивание ветвей дерева		318
   Некоторые функции работы с деревьями		319 
   Идентификационные сообщения окон просмотра 
      деревьев 					320 
   Программа работы с окнами просмотра деревьев 	321

13. Листы свойств и мастера				329
   Основы работы с листами свойств			330
   Создание листа свойств				331
   Создание страниц листа свойств			332
   Создание объекта листа свойств			332
   Добавление страниц к листу свойств			333
   Активизация листа свойств				333
   Резюме по листам свойств				334
   Обработка сообщений, поступающих от листов свойств	334
   Активизация кнопки Apply				335
   Пример работы с листом свойств			335
   Создание мастера				346
   Задание режима мастера				346
   Определение кнопок мастера			347
   Обработка стандартных сообщений мастеров		347
   Использование растровых изображений		348
   Стилевые переменные				348


552	MFC: основы программирования


   Пример работы с мастером			349
   Использование листов свойств и мастеров		361

14.Потоковая многозадачность			363
   Понятие потока					364
   Создание рабочего потока				365
   Завершение потока				366
   Пример многопотоковой программы			366
   Использование нескольких потоков			371
   Остановка и возобновление выполнения потока	375
   Управление приоритетами потоков			375
   Синхронизация					376
   Понимание проблемы синхронизации			377
   Объекты синхронизации				378
   Классы синхронизации в MFC			379
   Класс CSingleLock				379
   Работа с семафорами				381
   Пример работы с семафором			381
   Работа с объектами событий			386
   Пример работы с объектом события			387

15.Особые виды меню				395
   Обработчики изменений в меню			396
   Механизм внесения изменений в меню		396
   Определение обработчиков изменений		397
   Динамические меню				398
   Добавление элемента в меню			398
   Удаление элемента меню				400
   Определение числа элементов меню			400
   Изменение состояния элементов меню		400
   Конструктор класса CMenu				400
   Получение указателя на главное меню		401
   Динамическое размещение элементов меню		401
   Подробнее о работе программы			409
   Создание динамических выпадающих меню		410 
   Работа с динамическими выпадающими меню 		410
   Использование всплывающих меню			419
   Вызов всплывающего меню			419
   Загрузка меню					420
   Работа со всплывающими меню			420
   Подробнее о работе программы			429
   Эксперименты с меню				429


Содержание	553


16.Система помощи				431
   Два типа помощи					432
   Вызов помощи					433
   Файл помощи					434
   Создание файла помощи				434
   Общий вид файла помощи				435
   Некоторые RTF-команды				435
   Пример файла помощи				439
   Несколько слов о контекстных идентификаторах	442
   Включение системы помощи в MFC-программу		443
   Использование API-функции WinHelpQ		443
   Использование функции CWinApp::WinHelp()		445
   Обработчики сообщений помощи			445
   Обработка вызовов помощи			446
   Обработка сообщения WM_COMMANDHELP		447
   Обработка сообщения WM_CONTEXTMENU		447
   Обработка сообщения WM_HELPINFO		448
   Включение меню Help				449
   Включение кнопки "?"				449
   Демонстрационная программа			450
   Подробнее о работе программы			458
   С чем стоит поэкспериментировать?			458

17.Создание и просмотр документов			461
   Архитектура создания и просмотра документов		462
   Что такое документ?				463
   Что такое область просмотра?			463
   Управление хранением документов			463
   Динамическое создание объектов			463
   Создание каркаса приложения			464
   Порождение классов приложения и главного окна	464
   Порождение класса документа			465
   Порождение класса области просмотра		466
   Разрешение динамического создания объектов		467
   Создание шаблона документа			467
   Инициализация приложения				468
   Сохранение и загрузка документов			470
   Две важные функции из класса CDocument		471
   Функция UpdateAllViews()				471
   Функция SetModifiedFlag()				471
   Важная функция класса CView			471
   Стандартные идентификаторы			472
   Пример программы работы с документами		473


554	MFC: основы программирования


   Подробнее о работе программы			478 
   Области применения архитектуры создания документов	479
   В заключение					479

А. Обзор традиционной методики программирования 
       в Windows					481
   Базовые элементы Windows-приложений 		482
   Функция WinMain()				482
   Функция окна					482
   Класс окна					483
   Цикл сообщений					483
   Типы данных в Windows				483
   Каркас программы для Windows 95			484
   Определение класса окна				487
   Создание окна					490
   Цикл сообщений					491
   Функция окна					493
   Сравнение традиционных и MFC-программ		493

Б. Язык ресурсов. 
   Краткое описание					495
   ACCELERATORS					498
   AUTO3STATE					498
   AUTOCHECKBOX				499
   AUTORADIOBUTTON				499
   BITMAP						500
   CAPTION					500
   CHARACTERISTICS				500
   CHECKBOX					501
   CLASS						501
   COMBOBOX					502
   CONTROL					502
   CTEXT						508
   CURSOR					509
   DEFPUSHBUTTON				509
   DIALOG						510
   DIALOGEX					510
   EDITTEXT					511
   EXSTYLE					511
   FONT						511
   GROUPBOX					512
   ICON						512
   LISTBOX					513


Содержание	555


   LTEXT						513
   MENU						514
   MENUEX					514
   MENUITEM					515
   POPUP						515
   PUSHBOX и PUSHBUTTON				516
   RADIOBUTTON					517
   RCDATA					517
   RTEXT						518
   SCROLLBAR					518
   STATE3					519
   STRINGTABLE					519
   STYLE						519
   User-Defined					521
   VERSION					521
   VERSIONINFO					522

В. Использование OLE для работы с буфером обмена	523
   Что такое OLE?					524
   Что такое связывание и встраивание объектов?	524
   Модель компонентного объекта			525
   OLE-интерфейсы					525
   OLE-автоматизация				526
   Является ли OLE будущим Windows?			526
   Буфер обмена					526
   Подсистема работы с буфером обмена в MFC		527
   Два OLE-класса					527
   Функция AfxOlelnit()				527
   Чтение данных из буфера обмена	528
   Демонстрационная программа работы с буфером 
     обмена					530
   Предметный указатель				535


556	MFC: основы программирования
