- •Московская финансово-промышленная академия
- •Содержание
- •Глава 1. Модель программирования приложений
- •1.1. Потребительские свойства Windows
- •1.2. Процессы в Windows и потоковая многозадачность
- •1.3. Динамические библиотеки
- •1.4. Программное обеспечение для создания Win-приложений
- •Спецификация префиксов венгерской нотации
- •Глава 2. Обзор возможностей программирования
- •2.1. Общий взгляд на программирование в Windows
- •2.2. Взаимодействие Windows с программой
- •2.3. Win32 api: прикладной интерфейс для Windows
- •2.4. Компоненты окна
- •2.5. Основы приложений Windows
- •2.6. Каркас приложения Windows
- •2.7. Определение класса окна
- •Значения параметра lpszName
- •Наиболее употребляемые макросы для встроенных курсоров
- •Типы системных кистей
- •2.8. Создание окна
- •Наиболее распространенные стили
- •Параметры способа отображения nHow
- •2.9. Цикл обработки сообщений
- •2.10. Оконная функция
- •Типы префиксов
- •Глава 3. Обработка сообщений Windows
- •3.1. Что такое сообщения?
- •3.2. Обработка нажатая клавиш
- •Битовая карта lParam
- •3.3. Обработка сообщений wm_paint
- •3.4. Обработка сообщений «мыши»
- •3.5. Генерация сообщения wm_paint
- •3.6. Генерация сообщений таймера
- •Глава 4. Ресурсы и меню
- •4.1. Окна сообщений MessageBox
- •Значения функции MessageBox
- •Значения wMbType
- •4.2. Представляем меню
- •4.3. Использование ресурсов
- •Параметры menu
- •Параметры элементов меню
- •4.4. Включение меню в программу. Обработка команд
- •4.5. Включение акселераторов сменю
- •4.6. Загрузка таблицы акселераторов
- •Глава 5. Создание диалогов
- •5.1. Взаимодействие Win-диалогов с пользователем
- •5.2. Модальные диалоги: обработка сообщений
- •5.3. Активизация и создание простейшего диалога
- •5.4. Определение ресурсов диалога
- •Стили диалога
- •5.5. Оконная функция диалога
- •5.6. Основы работы со списками
- •Типы сообщений
- •5.7. Инициализация списка и выбор элементов
- •5.8. Окно ввода
- •5.9. Использование немодального диалога
- •Глава 6. Графические образы, иконки и курсоры
- •6.1. Иконка и курсор
- •6.2. Определение малой иконки
- •6.3. Работа с растровыми изображениями
- •Значения параметра dwRaster
- •6.4. Работа с несколькими растровыми изображениями
- •Глава 7. Более подробно об элементах управления
- •7.1. Работа с контрольными переключателями
- •7.2. Статические элементы
- •7.3. Работа с селекторными кнопками
- •7.4. Линейки прокрутки
1.3. Динамические библиотеки
Поскольку API содержит несколько сотен функций, можно предположить, что каждая программа для Windows должна связываться с большим количеством библиотек, и это может привести к дублированию большого объема кода. Однако это не так. Вместо обычных библиотек функции Windows API объединены в динамические библиотеки (Dynamic Link Library, DLL), доступ к которым может получить любая программа во время выполнения. В настоящем разделе Вы познакомитесь с тем, как работает динамическое связывание. Функции API Windows хранятся в перемещаемом формате в DLL. В процессе компиляции, когда программа вызывает функцию API, компоновщик не добавляет код этой функции к исполняемому модулю. Вместо него он добавляет только инструкции для загрузки функции, содержащие имя DLL, в которой находится функция, и ее имя. При выполнении программы все необходимые функции API также загружаются в память. Таким образом, при построении программы код функций API фактически не используется – он добавляется только тогда, когда программа загружается в память для выполнения.
Динамическое связывание имеет ряд важных преимуществ. Во-первых, поскольку практически все программы используют функции API, DLL сохраняет место на диске, не дублируя объектный код в выполняемых файлах. Во-вторых, дополнения и расширения Windows могут ограничиваться изменением программ в отдельных динамических библиотеках, и существующие приложения не будут нуждаться в перекомпиляции.
Приложения Windows могут использовать до 16 Гбайт виртуальной памяти! Более того, эти 16 Гбайт адресуются прямо, без переключения сегментов. В отличие от других операционных систем, которые используют сегментированную память, Windows рассматривает адресное пространство задачи как линейное. И поскольку она виртуализирует память, то каждое приложение может занять столько памяти, сколько (в разумной мере) пожелает. Так как прямая адресация более понятна программисту, она позволяет избежать опасности, связанной с использованием прежнего сегментного подхода.
Windows использует схему переключения задач с автовыгрузкой (preemptive multitasking), базируясь на временных квантах. Отработав некоторое время, задача в Windows автоматически выгружается системой и управление передается следующей задаче (если таковая имеется). Такая схема переключения является более предпочтительной, поскольку позволяет операционной системе полностью контролировать все задачи и предохраняет ее от блокирования одной задачей. Большинство программистов рассматривают схему переключения задач с автовыгрузкой как более прогрессивную.
1.4. Программное обеспечение для создания Win-приложений
Венгерская нотация. Если бы Вы руководили большой компанией типа Microsoft с тысячами программистов, работающими над различными проектами, вы бы непременно пришли к необходимости введения стандарта написания кода, в противном случае хаос был бы неизбежен, Так и была рождена спецификация написания кода в Microsoft. Её автор – человек по имени Чарльз Симони (Charles Simonyi). Все API, интерфейсы, технические статьи и прочее используют эти соглашения.
Обычно их называют венгерской нотацией. Почему? Вряд ли когда-нибудь мы точно узнаем об этом, да это и неважно – сейчас перед нами другая цель: научиться читать код Microsoft.
Венгерская нотация состоит из ряда соглашений по именованию переменных, функций, типов, констант, классов и параметров функций. В таблице 1.1 содержатся все префиксы, используемые при этом именовании.
Таблица 1.1