Проектирование интерфейса пользователя средствами Win32 API. Учебное пособие для вуза. 2-е изд. перераб. и доп

Р. Ганеев

Рекомендовано учебно-методическим объединением
по образованию в области прикладной информатики
в качестве учебного пособия для студентов высших
учебных заведений, обучающихся по специальности
«Прикладная информатика (по областям)»
и другим экономическим специальностям

Оглавление

ПРЕДИСЛОВИЕ 3

ГЛАВА 1. СОЗДАНИЕ ОКОН 6
1.1. ОПРЕДЕЛЕНИЯ 6
1.2. КЛАСС ОКОН 7
1.2.1. Описание используемых классом окон ресурсов 7
1.2.2. Пример регистрации класса окон 9
1.2.3. Функция окна 10
1.3. СОЗДАНИЕ ОКОН 13
1.4. ГЛАВНАЯ ФУНКЦИЯ ПРИЛОЖЕНИЯ 16
1.5. СТРУКТУРА ТЕКСТА ПРИЛОЖЕНИЯ 18
1.5.1. Мое первое приложение 20
1.5.2. Выводы 21
1.6. ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ СОЗДАНИЯ ОКОН 22
1.6.1. Функции поиска и определения состояния окон 22
1.6.2. Функции перемещения окон 23
1.6.3. Сообщения приложения для пользователя 26
1.7. ПРИМЕРЫ СОЗДАНИЯ ОКОН 29
1.7.1. Проверка наличия предыдущего экземпляра 29
1.7.2. Расположение окон черепицей 32
КОНТРОЛЬНЫЕ ВОПРОСЫ 37
УПРАЖНЕНИЯ 37

ГЛАВА 2. ОРГАНЫ УПРАВЛЕНИЯ 41
2.1. КНОПКИ 41
2.1.1. Создание кнопок 41
2.1.2. Кнопки и сообщения 43
2.1.3. Флажки и переключатели 48
2.2. СТАТИЧЕСКИЙ ОРГАН УПРАВЛЕНИЯ 48
2.3. ПОЛОСА ПРОКРУТКИ 49
2.3.1. Общие сведения 49
2.3.2. Создание полосы прокрутки 50
2.3.3. Простейшие полосы прокрутки 51
2.3.4. Сообщения от полосы прокрутки 53
2.3.5. Управление полосой прокрутки 54
2.3.6. Пример обработки сообщений от полос прокрутки 56
2.3.7. Новые функции управления полосами прокрутки 60
2.3.8. Пример окна приложения с полосой просмотра 61
2.4. РЕДАКТОР ТЕКСТА 64
2.4.1. Создание редактора 64
2.4.2. Сообщения для редактора текста 65
2.4.3. Сообщения от редактора текста 66
2.4.4. Пример работы с однострочным редактором 67
2.5. СПИСКИ СТРОК 69
2.5.1. Создание списка 69
2.5.2. Сообщения от списка 70
2.5.3. Сообщения для списка 70
2.5.4. Пример работы со списком 73
2.6. КОМБИНИРОВАННЫЙ СПИСОК 75
2.6.1. Создание комбинированного списка 75
2.6.2. Коды извещения 76
2.6.3. Сообщения для комбинированного списка 76
2.6.4. Пример работы с комбинированным списком 78
2.7. ЗАМЕНА УСТАНОВЛЕННЫХ АТРИБУТОВ ОКОН 81
КОНТРОЛЬНЫЕ ВОПРОСЫ 84
УПРАЖНЕНИЯ 84

ГЛАВА 3. ВЫВОД В ОКНО 88
3.1. СООБЩЕНИЕ WM_PAINT 88
3.2. ВИДЫ КОНТЕКСТА ОТОБРАЖЕНИЯ 93
3.2.1. Общий контекст отображения 93
3.2.2. Контекст отображения для класса окон 95
3.2.3. Личный контекст отображения 98
3.2.4. Родительский контекст отображения 99
3.2.5. Контекст отображения для окна 99
3.3. УСТАНОВКА АТРИБУТОВ КОНТЕКСТА ОТОБРАЖЕНИЯ 100
3.4. ВЫВОД ТЕКСТА 107
3.4.1. Настройка параметров шрифта 107
3.4.2. Выбор шрифта в контекст отображения 110
3.4.3. Функции вывода текста 111
3.4.4. Пример вывода текста в окно 112
3.4.5. Определение метрик шрифта 114
3.5. РИСОВАНИЕ ГЕОМЕТРИЧЕСКИХ ФИГУР 122
3.5.1. Функции рисования точки 122
3.5.2. Функции рисования линий 123
3.5.3. Функции рисования замкнутых фигур 131
3.6. GDI+ 133
3.6.1. Структура интерфейса GDI+ 134
3.6.2. Инструменты рисования 137
3.6.3. Отображение графических объектов 167
КОНТРОЛЬНЫЕ ВОПРОСЫ 179
УПРАЖНЕНИЯ 179

ГЛАВА 4. МЕНЮ 183
4.1. ЭЛЕМЕНТЫ МЕНЮ 183
4.2. СОЗДАНИЕ МЕНЮ 186
4.2.1. Вставка элементов в меню 187
4.2.2. Удаление элементов из меню 192
4.2.3. Управление состоянием элементов меню 195
4.2.4. Получение информации о меню 202
4.3. СООБЩЕНИЯ ОТ МЕНЮ 205
4.3.1. Сообщение WM_INITMENU 205
4.3.2. Сообщение WM_INITMENUPOPUP 205
4.3.3. Сообщение WM_COMMAND 205
4.3.4. Сообщение WM_MENUSELECT 205
4.4. ПЛАВАЮЩЕЕ МЕНЮ 206
4.5. АКСЕЛЕРАТОРЫ 211
КОНТРОЛЬНЫЕ ВОПРОСЫ 220
УПРАЖНЕНИЯ 220

ГЛАВА 5. ПАНЕЛЬ ИНСТРУМЕНТОВ И СТРОКА СОСТОЯНИЯ 224
5.1. ПАНЕЛЬ ИНСТРУМЕНТОВ 224
5.1.1. Создание панели инструментов 224
5.1.2. Управление состоянием кнопок панели 232
5.1.3. Вывод подсказок в панели инструментов 240
5.2. СТРОКА СОСТОЯНИЯ 248
КОНТРОЛЬНЫЕ ВОПРОСЫ 258
УПРАЖНЕНИЯ 258

ГЛАВА 6. ДИАЛОГОВЫЕ ПАНЕЛИ 260
6.1. ХАРАКТЕРИСТИКИ ДИАЛОГОВЫХ ПАНЕЛЕЙ 260
6.1.1. Единицы диалоговой панели 260
6.1.2. Стили диалоговой панели 261
6.1.3. Функция окна диалоговой панели 263
6.2. СОЗДАНИЕ ДИАЛОГОВОЙ ПАНЕЛИ 264
6.2.1. Создание модальной диалоговой панели 264
6.2.2. Создание немодальной диалоговой панели 265
6.2.3. Шаблон диалоговой панели 265
6.2.4. Пример немодальной диалоговой панели 277
6.3. СООБЩЕНИЯ И ДИАЛОГОВЫЕ ПАНЕЛИ 281
6.4. БЛОКНОТ ДИАЛОГОВЫХ ПАНЕЛЕЙ 290
6.5. СТАНДАРТНЫЕ ДИАЛОГОВЫЕ ПАНЕЛИ 304
6.5.1. Панели для открытия или сохранения файлов 304
6.5.2. Панель для выбора цветов 312
6.5.3. Панель для выбора шрифта 317
КОНТРОЛЬНЫЕ ВОПРОСЫ 324

УПРАЖНЕНИЯ 324

ПРИЛОЖЕНИЕ 1 328

ПРИЛОЖЕНИЕ 2 332

ПРИЛОЖЕНИЕ 3 341

ПРИЛОЖЕНИЕ 4 343

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 347

Предисловие
Книга посвящена методам проектирования интерфейса пользователя средствами Win32 API. Win32-приложения легко совмещают достоинства структурного, объектно-ориентированного и событийного программирования. Неизменная со времен Win16 методика и развивающаяся с ориентацией на Win64 функциональность программирования с каждым годом увеличивают число разработчиков в Win32. Когда требуется быстрый исполняемый код минимального объема, то у Win32-приложений конкурентов нет, и в ближайшие годы не предвидится.
Win32 API поддерживается 32-разрядными операционными системами Windows, а Win32-приложения легко переносятся на платформу Linux и обратно. Примеры этой версии книги апробированы в среде Visual С++ .NET в операционной системе Windows XP. Ранее они были апробированы в средах Borland C++ 3.1 и Builder 4.0, Visual С++ 5.0 и 6.0.
Перечислим главные отличия этой версии книги от первого издания. Примеры учитывают требования строгости Visual С++ .NET. Добавлен способ изменения возможностей стандартных органов управления. Третья глава представлена в двух вариантах: с GDI и с GDI+; GDI+ привлекательна в первую очередь кистями с переменным цветом раскрашивания и поддержкой растровых изображений форматов BMP, GIF, JPG, TIFF, Exif и PNG. Многие операции с растровыми изображениями, которые в GDI требовали около 100 труднообъяснимых строк, в GDI+ требуют не более 10 простых и понятных строк кода. Добавлен также предметный указатель.
В Windows интерфейс пользователя представляет собой целостную систему различных элементов. Элементами служат окна, органы управления, меню, диалоговые панели и другие объекты Windows. Каждый элемент задают множествами параметров состояния, входных и выходных сообщений. Для элементов одного класса описывают единый метод изменения параметров состояния и обработки входных и выходных сообщений. Основной задачей проектирования интерфейса пользователя является разработка целостной системы управления множеством состояний программного продукта.
Книга рассматривает проектирование приложений методами структурного и событийного программирования, что не исключает возможностей использования классов языка C++ и не противоречит им. Например, в третьей главе показано, как легко используются классы GDI+. Кроме того, все элементы интерфейса пользователя создаются динамически. Это исключает возможность вмешательства в работу приложений через файлы ресурсов.
Книга состоит из предисловия и шести глав. В каждой главе подробно обсуждаются обязательные разделы изучаемого материала и кратко рассматриваются вспомогательные функции, относящиеся к этому разделу. В конце каждого раздела перечисляются вопросы контроля полученных знаний, а также приводятся варианты упражнений. Для первых четырех глав предусмотрены справочные материалы, которые оформлены в таблицах ПРИЛОЖЕНИЙ в конце книги. В ссылках на таблицы N. M в книге N указывает на номер ПРИЛОЖЕНИЯ, а M – на номер таблицы в ПРИЛОЖЕНИИ N.
Глава 1 посвящена созданию главного объекта Windows – окон. Рассматривается понятие окна с точки зрения языка программирования. Читатель знакомится со способами описания классов и функций окон, главной функции приложения. Отдельно рассмотрена функция создания окон этих классов. Показан механизм получения и обработки сообщений. Рассматриваются базовые функции перемещения и изменения расположения окон, а также средства обмена сообщениями между приложением и пользователем.
Глава 2 рассматривает определенные в системе Windows классы окон. Это органы управления – статический текст, кнопки, списки, редактор текста, полосы прокрутки и комбинированные списки. Здесь читатель знакомится со способами создания и управления состоянием органов управления. В этой главе продолжается изучение функций обмена и обработки сообщений между окнами.
Глава 3 поясняет, как выводить тексты и графические примитивы в окнах. Здесь читатель знакомится с контекстом отображения и его основными атрибутами, основными понятиями метрики Windows и базовыми функциями отображения текста и графических примитивов. Примеры этой главы посвящены выводу таблиц, графиков, диаграмм и различным эффектам вывода текста. Этот материал здесь же продублирован и расширен для технологии GDI+.
Глава 4 рассматривает главное меню окна и его разделы, временные и плавающее меню. Подробно рассматриваются функции динамического создания, изменения и управления состоянием элементов меню. Здесь же изучают способы создания акселераторов и работы с ними.
Глава 5 посвящена панели инструментов и строке состояния. Здесь изучают базовые способы создания и использования панели инструментов и строки состояния. Также показан механизм обработки уведомительных сообщений. Рассматриваемые в этой главе примеры и упражнения связаны с примерами и упражнениями из предыдущих глав.
Глава 6 рассматривает способы динамического создания диалоговых панелей. Здесь показаны модальные и немодальные панели, а также блокноты диалоговых панелей. Особое внимание уделено примерам обмена данными и обработке сообщений в диалоговых панелях и блокнотах панелей. Показаны способы создания стандартных диалоговых панелей операционной системы.