- •Московская финансово-промышленная академия
- •Содержание
- •Глава 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. Линейки прокрутки
2.10. Оконная функция
Другая функция в каркасной программе является оконной функцией. В нашей программе она названа WindowFunc(), но она может иметь и любое другое имя. В качестве параметров этой функции передаются первые четыре поля структуры MSG. В нашей каркасной программе единственным используемым параметром является собственно сообщение. Однако в следующей главе Вы узнаете, как используются другие параметры этой функции.
В нашем примере оконная функция самостоятельно обрабатывает единственное сообщение WM_DESTROY. Это сообщение посылается, когда пользователь завершает программу. Обрабатывая его, оконная функция должна вызвать функцию API PostQuitMessage(). Значение параметра этой функции будет использовано как код возврата программы. Вызов PostQuitMessage() приводит к посылке Вашему приложению сообщения WM_QUIT, получив которое, функция GetMessage() возвращает нулевое значение и завершает тем самым цикл обработки сообщений и Вашу программу.
Все остальные сообщения, получаемые оконной функцией, направляются Windows с помощью вызова функции DefWindowProc() для обработки по умолчанию. Это необходимо, поскольку все сообщения должны быть обработаны тем или иным способом.
Соглашения об именах. Если Вы не знакомы с программированием под Windows, некоторые имена и описания, употребляемые в каркасной программе, могут показаться несколько необычными. Однако они соответствуют соглашениям, представленным фирмой Microsoft для программирования под Windows. Для функций используются имена, построенные из глаголов и существительных, причем первые буквы этих слов – заглавные. Мы будем следовать этому соглашению в отношении большинства имен функций, упомянутых в книге.
Для имен переменных Microsoft предлагает более сложную систему, предусматривающую обозначение именуемых типов данных. Для этого используется небольшой префикс из строчных букв, а собственно имя начинается с заглавной буквы. Типы префиксов представлены в нижеследующей таблице 2.6. Откровенно говоря, использование префиксов, обозначающих тип данных, спорно и не всегда адекватно. Поскольку большинство Windows-программистов прибегают к такой системе именования, в данной книге будет использоваться именно эта система; Вы же в своих программах можете поступать по своему усмотрению.
Таблица 2.6
Типы префиксов
№ |
Префикс |
Тип данных |
1 |
b |
Булевский (байт) |
2 |
c |
Символ (байт) |
3 |
dw |
Длинное беззнаковое целое (DWORD) |
4 |
f |
16-битный флаг (битовая карта) |
5 |
fn |
Функция |
6 |
h |
Дескриптор (handle) |
7 |
l |
Длинное целое (long) |
8 |
lp |
Длинный указатель (long pointer) |
9 |
n |
Целое (16 бит) |
10 |
p |
Указатель (pointer) |
11 |
pt |
Точка (два 32-битных целых) |
12 |
w |
Целое без знака (WORD, 16 бит) |
13 |
sz |
Указатель на строку, заканчивающуюся 0 (string zero) |
14 |
lpsz |
Длинный указатель на sz (long pointer string zero) |
15 |
rgb |
Длинное целое, содержащее цветовую комбинацию RGB |