Win32 API

advertisement
Win32 API. Разработка приложений для Windows
Ю. Щупак
978538800301
Содержание
Предисловие
13
Кому адресована эта книга
Как работать с книгой
От издательства
14
14
15
Глава 1. «Hello, World!», или Первые шаги к пониманию основных концепций Windows
16
Базовые концепции
Графический интерфейс пользователя
Многозадачность
Управление памятью
Независимость от аппаратных средств
Вызовы функций и DLL
Объектно-ориентированное программирование
Типы данных Win32
Архитектура, управляемая событиями
Оконная процедура
Оконные классы
Цикл обработки сообщений
Наипростейшая программа для Windows
Программа «Hello, world!» — первый вариант
Файл исходного текста программы
Регистрация класса окна
Создание окна
Использование функции CreateWindowEx
Отображение окна на экране
Обработка сообщений
Оконная процедура
Программа «Hello, world!» — второй вариант
Функции поддержки окон
Часто используемые сообщения
Модификация характеристик окна
Особенности программирования для Windows
Синхронные и асинхронные сообщения
Посылка сообщений из приложения
Использование глобальных или статических переменных
Получение дескриптора экземпляра приложения
Предотвращение зависания приложения в случае медленной обработки отдельных событий
Использование утилиты Spy++
16
16
17
18
19
19
20
20
21
22
23
25
25
30
31
32
35
38
39
40
42
46
49
50
51
52
53
54
55
55
56
57
Глава 2. GDI — графический интерфейс устройства. Рисование линий, фигур, текста
58
Контекст устройства
Типы контекстов устройства
Регионы Windows. Отсечение
Контекст дисплея
Использование сообщения WM_PAINT
Контекст принтера
Контекст в памяти (совместимый контекст)
Метафайловый контекст
Информационный контекст
Системы координат и преобразования
Экранные, оконные и клиентские координаты
Типы координатных систем
Физическая система координат
Система координат устройства
Страничная система координат и режимы отображения
Мировая система координат
Получение информации о возможностях устройства
59
59
60
60
63
65
65
66
66
66
66
67
68
68
69
72
74
Управление цветом. Вывод пиксела
Цветовое пространство HLS
Цветовое пространство RGB
Определение цвета при работе с палитрой
Вывод пикселов
Атрибуты контекста устройства, влияющие на рисование
Режим рисования. Бинарные растровые операции
Режим смешивания фона и цвет фона графического элемента
Общие операции с графическими объектами
Линии и кривые
Рисование отрезков
Дуги
Кривые Безье
Перья
Стандартные перья
Простые перья
Расширенные перья
Кисти
Стандартные кисти
Пользовательские кисти
Замкнутые фигуры
Прямоугольники
Эллипсы, сегменты, секторы и закругленные прямоугольники
Многоугольники
Регионы и отсечение
Создание регионов
Операции с объектами регионов
Прорисовка регионов
Отсечение
Отображение текста
Наборы символов и кодировки
Unicode
Шрифты
Вывод текста
Полосы прокрутки и вывод текста
Примеры программ
Просмотрщик текстовых файлов
Вывод временной диаграммы напряжения переменного электрического тока
76
76
76
77
78
78
79
81
81
82
83
84
86
87
88
89
93
96
97
97
101
101
105
107
109
109
111
111
112
113
114
117
118
129
141
146
146
153
Глава 3. GDI. Палитры, растры, метафайлы
159
Палитры
Основные принципы управления палитрами
Системная палитра
Логическая палитра
Растры
Аппаратно-независимые растры
Аппаратно-зависимые растры
DIB-секции
Тернарные растровые операции
Метафайлы
Создание метафайла
Воспроизведение метафайла
159
159
161
166
174
175
193
200
202
206
207
210
Глава 4. Средства ввода
213
Клавиатура
Фокус ввода
Клавиши и символы
Аппаратные сообщения
Символьные сообщения
Работа с кареткой
Примитивный текстовый редактор
Мышь
Терминология, связанная с мышью
Сообщения мыши
Обработка двойного щелчка
213
214
215
215
217
219
220
225
226
226
227
Обработка сообщений от колеса мыши
Рисуем мышью
Эластичные прямоугольники
Улучшенное приложение для просмотра текстовых файлов
227
228
234
237
Глава 5. Ресурсы Windows-приложения
242
Редакторы ресурсов
Пиктограммы
Создание пиктограммы с помощью графического редактора
Импорт существующей пиктограммы
Просмотр и редактирование ресурсов приложения
Использование ресурса в приложении
Курсоры
Растровые образы
Ресурсы, определяемые программистом
Доступ к данным в ресурсе
Воспроизведение звуковых файлов
Таблицы строк
243
243
246
250
251
252
256
260
263
263
264
268
Глава 6. Меню и быстрые клавиши
272
Организация и виды меню
Типы пунктов меню
Системное меню
Клавиатурный интерфейс меню
Статус пунктов меню
Отметка пунктов меню
Пункт меню, применяемый по умолчанию
Определение меню в виде ресурса
Шаблон меню
Вызов редактора меню
Атрибуты пункта меню
Уровни меню
Процедура определения пункта для меню i-го уровня
Процедура определения меню нулевого уровня
Добавление меню к окну приложения
Внесение изменений в меню
Функция CheckMenuItem
Функция CheckMenuRadioItem
Функция EnableMenuItem
Функция ModifyMenu
Функции для получения дескриптора меню
Сообщения меню
Приложение MenuDemo1
Работа с контекстным меню
Определение шаблона контекстного меню
Загрузка меню
Вызов меню
Приложение MenuDemo2
Быстрые клавиши
Модификация определения ресурса меню
Таблица быстрых клавиш
Загрузка таблицы быстрых клавиш
Модификация цикла обработки сообщений
Приложение MenuDemo3
272
273
274
273
275
275
276
276
276
277
278
279
279
280
280
281
282
282
283
283
284
284
286
293
293
293
293
294
299
299
300
301
301
302
Глава 7. Диалоговые окна
304
Типы диалоговых окон
Элементы управления в диалоговом окне
Создание и обработка диалогового окна
Шаблон диалогового окна
Шаблонная система единиц
Модальный диалог
Вызов и использование редактора диалоговых окон
Добавление элемента управления Рисунок
Добавление элементов управления Надпись
Выравнивание элементов управления на форме диалога
304
305
307
307
308
308
309
311
312
314
Определение диалоговой процедуры и вызов диалога
Изменение атрибутов элемента управления
Использование других элементов управления
Кнопки
Кнопка Owner draw
Флажки
Переключатели
Групповая рамка
Пример использования групповой рамки, флажков и переключателей
Клавиатурный интерфейс и порядок обхода элементов управления
Окно редактирования
Список
Комбинированный список
Немодальный диалог
Различия между модальными и немодальными окнами диалога
Пример использования немодального окна диалога
Окно сообщений
Диалоговые окна общего пользования
316
320
323
323
325
331
333
333
334
340
341
344
356
366
366
367
372
374
Глава 8. Элементы управления общего пользования
379
Основы применения
Инициализация библиотеки
Создание элементов управления общего пользования
Стили элементов управления общего пользования
Обмен сообщениями
Элементы управления главного окна
Панель инструментов
Окно подсказки
Замена класса KWnd на класс KWndEx
Строка состояния
Другие элементы управления
Индикатор процесса
Регулятор
Счетчик и поле с прокруткой
Создание счетчика
380
380
382
383
384
385
385
406
408
413
423
423
428
435
435
Глава 9. Многозадачность
441
Объекты ядра
Процессы и потоки
Планирование потоков
Классы приоритетов процесса и приоритеты потоков
Управление процессами
Использование функции CreateProcess
Завершение процесса
Запуск обособленных дочерних процессов
Управление потоками
Функция CreateThread
Функция Sleep
Пример многопоточного приложения
Взаимодействие потоков через глобальную переменную
Синхронизация
Атомарный доступ и семейство Interlocked-функций
Критические секции
Wait-функции
События
Семафоры
Мьютексы
Обмен данными между процессами
Виртуальная память. Адресное пространство процесса
Файлы данных, проецируемые в память
Использование проекции файла для реализации разделяемой памяти
Модель «клиент-сервер»
Обмен данными с помощью сообщения WM_COPYDATA
Приложение ServerApp
Приложение ClientApp
441
443
444
445
447
447
448
449
451
451
452
452
456
459
459
460
461
464
466
467
469
470
472
472
473
474
475
479
Не забывайте освобождать ресурсы
Когда многопоточность реально полезна?
483
484
Глава 10. Таймеры и время
486
Время Windows
Системное время
Измерение малых временных интервалов
Использование счетчика монитора производительности
Использование команды RDTSC
Программирование задержек в исполнении кода
Использование функции Sleep
Использование метода uDelay класса KTimer
Класс QTimer
Стандартный таймер
Первый способ использования стандартных таймеров
Второй способ использования стандартных таймеров
Мультимедийный таймер
Функции timeSetEvent и timeKillEvent
Тестирование мультимедийного таймера
486
487
488
488
489
497
498
501
502
504
504
508
509
509
511
Глава 11. Библиотеки динамической компоновки DLL
515
DLL и адресное пространство процесса
Создание собственной DLL
Вызов функций из DLL
Неявная загруза DLL
Явная загрузка DLL
Отложенная загрузка DLL
Загрузка ресурсов из DLL
Функция входа/выхода
Локальная память потока (TLS)
Динамическая TLS
Статическая TLS
514
517
519
519
521
523
525
527
529
531
538
Глава 12. Специальные приложения
539
Анимация
Приложение со стандартным таймером
Двойная буферизация
Рисование в реальном времени
Требования к приемнику информации от метеорадиолокатора
Разработка модели программного имитатора
539
539
543
547
547
548
Приложение 1. Интегрированная среда Visual C++ 6.0
563
Запуск IDE. Типы приложений
Создание нового проекта
Добавление к проекту файлов с исходным кодом
Многофайловые проекты
Компиляция, компоновка и выполнение проекта
Конфигурация проекта
Как закончить работу над проектом
Как открыть проект, над которым вы ранее работали
Встроенная справочная система
Работа с отладчиком
Некоторые полезные инструменты
563
565
566
568
568
569
569
569
570
570
574
Приложение 2. Интегрированная среда Visual Studio.NET
577
Создание нового проекта
Добавление к проекту нового файла
Компиляция, сборка и выполнение
Работа с редакторами ресурсов
578
580
582
583
Приложение 3. Работа с утилитой Spy++
Список литературы
Алфавитный указатель
584
587
588
Download