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