В.В. Васильчиков
Программирование в Visual C++
с использованием библиотеки MFC
Учебное пособие
Рекомендовано
Научно-методическим советом университета
для студентов специальности Математическое обеспечение
и администрирование информационных систем
Ярославль 2006
УДК 004.4
ББК З 973.2-018я73
В 19
Рекомендовано
Редакционно-издательским советом университета
в качестве учебного издания. <...> Операция
Переход на дополняющую скобку
Комбинация клавиш
Указатель перед скобкой и Ctrl+]
Сдвинуть строки вправо
Выделить строки и Tab
Сдвинуть строки влево
Выделить строки и Shift+Tab
Открыть диалоговое окно Find
Ctrl+F
Найти следующее вхождение
F3
Найти предыдущее вхождение
Shift+F3
Найти след. вх. выделенного текста
Ctrl+F3
Найти пред. вх. выделенного текста
Ctrl+Shift+F3
Включить/выключить закладку
Ctrl+F2
Перейти к следующей закладке
F2
Перейти к предыдущей закладке
Shift+F2
Снять все закладки
Ctrl+Shift+F2
Отладка программы
Как и в любой другой среде программирования, удобство разработки
во многом определяется возможностями предоставляемого отладчика. <...> Сначала нужно вы8
звать диалоговое окно Project Settings (нажав, например, Alt-F7), затем на
вкладке C/C++ в строке Preprocessor definitions добавить определение
_AFXDLL (если его там нет), а в окне Project Options установить опцию
/MDd. <...> Комбинация
клавиш
Операция
Добавить/удалить точку останова в строке с курсором
F9
Удалить все точки останова
Ctrl+Shift+F9
Начать/возобновить выполнение программы
F5
Повторить выполнение программы с самого начала
Ctrl+Shift+F5
Выполнить следующий оператор (режим step into)
F11
Выполнить следующий оператор (режим step over)
F10
Выполнить до выхода из текущей функции (step into)
Shift+F11
Выполнить до текущей позиции курсора
Ctrl+F10
Перейти к позиции курсора без выполнения операторов
Ctrl+Shift+F10
Открыть диалоговое окно QuickWatch
Shift+F9
Открыть диалоговое окно Breakpoints
Ctrl+B
Конец отладки
Shift+F5
В качестве упражнения для освоения перечисленных средств создания
и отладки программ в среде Developer Studio читателям предлагается попробовать их на примере разработки <...>
Программирование_в_Visual_C++_с_использованием_библиотеки_MFC_.pdf
Министерство образования и науки Российской Федерации
Федеральное агентство по образованию
Ярославский государственный университет им. П.Г. Демидова
В.В. Васильчиков
Программирование в Visual C++
с использованием библиотеки MFC
Учебное пособие
Рекомендовано
Научно-методическим советом университета
для студентов специальности Математическое обеспечение
и администрирование информационных систем
Ярославль 2006
Стр.1
УДК 004.4
ББК З 973.2-018я73
В 19
Рекомендовано
Редакционно-издательским советом университета
в качестве учебного издания. План 2006 года
Рецензенты:
кандидат физико-математических наук С.И. Щукин;
кафедра теории и методики обучения информатике
ЯГПУ им. К.Д. Ушинского
Васильчиков, В.В. Программирование в Visual C++ с испольВ
19
зованием библиотеки MFC : учебное пособие / В.В. Васильчиков
; Яросл. гос. ун-т. – Ярославль : ЯрГУ, 2006. – 236 с.
ISBN 5-8397-0463-6
Рассмотрены основные моменты разработки Windowsприложений
в среде Visual C++ с использованием библиотеки
MFC.
Рекомендуется студентам, обучающимся по специальности
010503 Математическое обеспечение и администрирование информационных
систем (дисциплина "Программирование в среде
Windows" (курс по выбору), блок ОПД), очной формы обучения.
Библиогр.: 4 назв.
УДК 004.4
ББК З 973.2-018я73
© Ярославский
государственный
университет, 2006
ISBN 5-8397-0463-6
© В.В. Васильчиков, 2006
2
Стр.2
Введение
Система программирования Visual C++ относится к числу наиболее
распространенных и популярных средств разработки программного обеспечения.
Это высокоуровневая и удобная система, предлагающая широкий
набор разнообразных инструментов проектирования.
Данное учебное пособие написано на основе лекционного курса по
использованию Visual C++ и библиотеки MFC для создания Windowsприложений,
читавшегося автором для студентов факультета ИВТ ЯрГУ,
обучающихся по специальности "Математическое обеспечение и администрирование
информационных систем".
Автор исходит из предположения, что студенты, приступающие к
изучению данного курса, знакомы с языком программирования C++.
Предполагается также, что в процессе обучения студенты будут выполнять
все предлагаемые им в данном пособии учебные задания. Часть заданий
представляет собой развитие или модификацию ранее разработанного приложения.
В этом случае в качестве стартовой точки используется предыдущая
версия проекта. В тексте задания та часть программного кода, которая
должна быть добавлена или модифицирована, выделена полужирным
шрифтом. Основная часть заданий взята из книги Майкла Янга [1].
Для удобства использования все исходные коды (точнее проекты
Visual C++) доступны в локальной сети факультета. Проекты структурированы
по темам учебного курса. Предполагаемый результат находится в
папке Solution. Если задание предполагает модификацию разработанной
ранее версии приложения, то она находится в папке Starter.
3
Стр.3
Оглавление
Введение .............................................................................................................. 3
Тема 1. Установка программного обеспечения .......................................... 4
1.1. Установка Microsoft Visual C++ 6 .......................................................... 4
1.2.Установка справочной системы Visual C++ 6 ....................................... 6
Тема 2. Создание программ в среде Developer Studio ................................ 7
Создание проекта ........................................................................................... 7
Создание и редактирование исходного файла программы ....................... 7
Некоторые возможности текстового редактора ......................................... 7
Отладка программы ....................................................................................... 8
Комбинации клавиш отладчика Developer Studio ...................................... 9
Тема 3. Модель программирования в Windows ........................................ 10
Обработка сообщений ................................................................................. 10
Интерфейс графического устройства ........................................................ 10
Программирование, основанное на ресурсах ........................................... 10
Динамически подключаемые библиотеки ................................................ 11
Интерфейс прикладных программ Win32 API ......................................... 11
Тема 4. Процесс построения программ в Visual C++ ............................... 12
4.1. Создание программы в Visual C++ ....................................................... 12
Проект программы ....................................................................................... 12
Промежуточные файлы Visual C++ ........................................................... 13
4.2. Компоненты Visual C++ ........................................................................ 13
Редакторы и средства просмотра ресурсов ............................................... 13
Компилятор C/C++ ...................................................................................... 14
Редактор исходного текста ......................................................................... 14
Компилятор ресурсов .................................................................................. 14
Компоновщик ............................................................................................... 14
AppWizard ..................................................................................................... 15
ClassWizard ................................................................................................... 15
Средства просмотра исходного кода ......................................................... 15
Интерактивная справочная система .......................................................... 15
Components and Controls Gallery ................................................................ 15
226
Стр.226
Тема 5. Создание программ с графическим интерфейсом ..................... 16
Генерация исходного кода .......................................................................... 16
Изменение исходного кода ......................................................................... 17
Классы и файлы программы ....................................................................... 19
Этапы выполнения программы .................................................................. 19
Тема 6. Реализация представления ............................................................. 22
6.1. Реализация графического представления ............................................. 22
Генерация исходных файлов ...................................................................... 22
Определение переменных класса представления .................................... 22
Инициализация переменных класса представления ................................ 22
Идентификаторы стандартных указателей Windows, которые можно
передавать функции LoadStandardCursor .................................................. 23
Добавление обработчиков сообщений Windows ...................................... 23
Командные сообщения ................................................................................ 23
Пример: добавление обработчика нажатия левой кнопки мыши ........... 24
Программирование обработки нажатия левой кнопки мыши ................ 25
Схема сообщений ........................................................................................ 25
Схема сообщений – функция OnMouseMove ........................................... 26
Схема сообщений – функция OnLButtonUp ............................................. 26
Параметры сообщений мыши .................................................................... 27
Проектирование ресурсов программы ...................................................... 27
Настройка окна программы ........................................................................ 27
6.2. Реализация текстового представления ............................................... 28
Генерация исходных файлов ...................................................................... 29
Редактирование ресурсов программы ....................................................... 29
Редактирование таблицы горячих клавиш ................................................ 29
Тема 7. Реализация документа ..................................................................... 30
7.1. Сохранение графических данных ........................................................... 30
Определение класса для сохранения информации
о введенных линиях ..................................................................................... 30
Дополнения в классе документа ................................................................ 30
Реализация функций класса документа ..................................................... 31
7.2. Перерисовка окна .................................................................................... 32
7.3. Добавление команд в меню ..................................................................... 32
7.4. Удаление данных документа .................................................................. 33
7.5. Реализация команд меню ........................................................................ 33
Обработка команды Delete All ................................................................... 33
Обработка команды Undo ........................................................................... 34
227
Стр.227
Тема 8. Хранение данных .............................................................................. 36
8.1. Ввод-вывод программы MiniDraw ......................................................... 36
Добавление команд в меню File ................................................................. 36
Задание стандартного расширения файлов .............................................. 36
Поддержка команд меню File ..................................................................... 37
Сериализация данных документа .............................................................. 38
Установка флага изменений ....................................................................... 39
Поддержка технологии "drag-and-drop" .................................................... 40
Регистрация типа файла .............................................................................. 40
8.2. Ввод-вывод программы MiniEdit ............................................................ 41
Добавление команд в меню File ................................................................. 41
Добавление кода поддержки ...................................................................... 41
Функции Read и Write класса CArchive .................................................... 42
8.3. Другие средства ввода-вывода файлов ................................................. 42
Тема 9. Прокрутка и разделение окон представления ............................ 43
9.1. Добавление средств прокрутки окна .................................................... 43
Преобразование координат ......................................................................... 44
Ограничение размера рисунка ................................................................... 45
Изменение формы указателя ...................................................................... 47
9.2. Добавление средств разделения окна .................................................... 48
9.3. Обновление окна представления ............................................................ 49
Эффективная перерисовка .......................................................................... 50
Тема 10. Перемещаемые панели и строки состояния .............................. 53
10.1. Добавление в новую программу перемещаемой панели
инструментов и строки состояния ............................................................. 53
10.2. Добавление перемещаемой панели инструментов в программу
MiniDraw .......................................................................................................... 54
Определение ресурсов................................................................................. 55
Добавление новых команд меню ............................................................... 55
Изменение текста программы .................................................................... 57
Написание обработчиков сообщений ........................................................ 59
Реализация обработчиков сообщений ....................................................... 59
10.3. Добавление строки состояния в программу MiniDraw ..................... 61
Необходимые объявления ........................................................................... 61
Завершение создания меню View .............................................................. 62
Изменение интерактивной справки ........................................................... 62
228
Стр.228
Тема 11. Создание диалоговых окон ........................................................... 63
11.1. Создание модальных диалоговых окон ................................................ 63
Создание программы ................................................................................... 64
Диалоговое окно Format и его элементы управления .............................. 66
Задание порядка обхода элементов управления ...................................... 66
Создание класса для управления диалоговым окном .............................. 67
Определение переменных-членов класса ................................................. 67
Определение обработчиков событий ........................................................ 68
Управление диалоговым окном класса CFormat ...................................... 69
MFC-классы для элементов управления ................................................... 70
Управление окном класса CFormat – Style ............................................... 70
Управление окном класса CFormat – Justify и Pitch ................................. 71
Управление окном класса CFormat – OnChangeSpacing .......................... 71
Управление окном класса CFormat – OnPaint........................................... 72
Отображение диалогового окна ................................................................. 73
Отображение диалогового окна – OnTextFormat ..................................... 74
Отображение окна класса CFontDemoView – OnDraw ............................ 75
11.2. Создание немодальных диалоговых окон ............................................ 77
11.3. Создание диалоговых окон с вкладками .............................................. 78
Создание шаблона диалогового окна ........................................................ 78
11.4. Диалоговые окна общего назначения ................................................... 82
Тема 12. Разработка диалоговых приложений .......................................... 83
12.1. Простые диалоговые программы ........................................................ 83
Генерация исходных файлов программы DlgDemo ................................. 83
Настройка программы DlgDemo ................................................................ 84
Функция InitInstance .................................................................................... 87
12.2. Программы просмотра форм .............................................................. 87
Генерация исходных файлов ...................................................................... 88
Настройка программы FormDemo ............................................................. 88
Тема 13. Создание многодокументных приложений ............................... 92
13.1. Многодокументный интерфейс .......................................................... 92
13.2. Создание MDI-программы в среде Developer Studio ......................... 92
Генерация кода ............................................................................................. 92
13.3. Основные классы MDI-программы ...................................................... 93
Класс приложения ....................................................................................... 93
Класс документа .......................................................................................... 93
Класс главного окна .................................................................................... 93
Класс дочернего окна .................................................................................. 94
229
Стр.229
Использование документов различных типов .......................................... 95
Класс представления ................................................................................... 95
Сгенерированный код программы ............................................................. 95
13.4. Настройка ресурсов .............................................................................. 96
Команда New Window ................................................................................. 96
Добавление горячих клавиш и значка ....................................................... 97
Тема 14. Ввод/вывод символов ..................................................................... 98
14.1. Отображение текста .......................................................................... 98
Генерация исходного кода программы ..................................................... 98
Отображение текста в окне представления .............................................. 98
Основные этапы отображения текста внутри окна представления ...... 100
Метрики шрифта ........................................................................................ 100
Цвет шрифта ............................................................................................... 100
Функции класса CDC для установки и определения атрибутов текста101
Функции отображения текста .................................................................. 101
Создание объекта Font и сохранение текста ........................................... 102
Использование стандартных шрифтов .................................................... 103
Значения nIndex для выбора стандартных шрифтов ............................. 104
Поддержка средств прокрутки ................................................................. 104
14.2. Чтение кодов символов, вводимых с клавиатуры ........................... 106
Обработка сообщения WM_KEYDOWN ................................................ 106
О работе функции CTextDemoView::OnKeyDown ................................. 108
Обработка сообщения WM_CHAR .......................................................... 109
14.3. Управление курсором при редактировании ...................................... 112
Добавление новых функций обработки сообщений .............................. 112
Добавление кода функций-обработчиков ............................................... 112
Тема 15. Использование функций рисования ......................................... 115
15.1. Создание объекта контекста устройства ..................................... 115
15.2. Выбор средств рисования внутри объекта ..................................... 116
Перо и кисть ............................................................................................... 116
Выбор стандартных инструментов рисования ....................................... 117
Создание инструментов рисования ......................................................... 118
Создание кисти .......................................................................................... 119
Выбор пера или кисти в объекте контекста устройства ........................ 120
Пример функции OnDraw ......................................................................... 120
15.3. Установка атрибутов рисования для объекта ............................... 121
Стандартные атрибуты .............................................................................. 121
Режим отображения ................................................................................... 121
230
Стр.230
15.4. Создание графических изображений ................................................ 123
Базовые функции рисования .................................................................... 123
Программа Mandel – постановка задачи ................................................. 123
Программа Mandel – генерация и настройка кода ................................. 124
15.5. Функции рисования - члены класса CDC ........................................... 127
Прямые линии ............................................................................................ 127
Регулярные кривые – дуга ........................................................................ 128
Регулярные кривые – кривая Безье .......................................................... 128
Режим рисования линий, режим фона ..................................................... 130
Рисование замкнутых линий .................................................................... 131
Другие функции рисования ...................................................................... 132
15.6. Пример – программа MiniDraw ......................................................... 133
Изменения в интерфейсе ........................................................................... 133
Определение классов для фигур .............................................................. 134
Определение классов для фигур – комментарии ................................... 135
Другие модификации программы ............................................................ 136
Тема 16. Растровые изображения и битовые операции......................... 137
16.1. Создание растровых изображений ................................................... 137
Загрузка растрового изображения из ресурсов ...................................... 137
Создание растрового изображения с использованием функций
рисования .................................................................................................... 138
Пример создания растрового изображения с использованием
функций рисования ................................................................................... 139
Отображение растрового изображения ................................................... 140
Другие способы использования растровых изображений ..................... 141
16.2. Выполнение битовых операций при отображении ......................... 141
Функция PatBlt ........................................................................................... 142
Функция BitBlt ........................................................................................... 142
Использование функции BitBlt для анимации ....................................... 144
Функция StretchBlt ..................................................................................... 145
16.3. Отображение значков ........................................................................ 146
Пример – программа BitDemo .................................................................. 147
Тема 17. Печать и предварительный просмотр ...................................... 150
17.1. Добавление в программу средств печати и предварительного
просмотра ..................................................................................................... 150
Добавление средств печати при генерации кода.................................... 150
Модификация ресурсов программы ........................................................ 150
Модификация текста программы ............................................................. 151
Добавление средств печати в окно представления класса CEditView . 152
231
Стр.231