- •Московская финансово-промышленная академия
- •Содержание
- •Глава 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 |
BLACK_BRUSH |
Черный |
2 |
DKGRAY_BRUSH |
Темно-серый |
3 |
HOLLOW_BRUSH |
Прозрачный |
4 |
LTGRAY_BRUSH |
Светло-серый |
5 |
WHITE_BRUS |
Белый |
Приведенные в таблице макросы можно использовать в качестве параметра GetStockObject() для получения соответствующей кисти.
Когда класс окна полностью определен, он должен быть зарегистрирован в системе. Для этого используется функция API RegisterClass(), прототип которой имеет следующий вид:
ATOM RegisterClass(CONST WNDCLASS *IpWClass) .
Эта функция возвращает значение, идентифицирующее зарегистрированный класс окна. Тип АТОМ определяется при помощи typedef и означает WORD. Каждый класс окна определяется уникальным значением. Параметр lpWClass должен представлять адрес структуры WNDCLASS.
2.8. Создание окна
Когда класс окна определен и зарегистрирован, Ваше приложение может создавать окна этого класса, используя функцию API CreateWindow():
HWND CreateWindow(
LPCSTR IpClassName, // Имя класса окна
LPCSTR IpWinName, // Заголовок окна
DWORD dwStyle, // Стиль окна
int x, // Координаты x и y
int y, // левого верхнего угла
int Width, // Ширина окна
int Height, // Высота окна
HWND hParent, // Дескриптор родительского окна
HMENU hMenu, // Дескриптор главного меню
HINSTAHCE hThisInst, // Дескриптор приложения
LPVOID IpszAdditional // Указ. на дополн.информацию
);
Как видно из программы, многие параметры функции CreateWindow() могут принимать значения по умолчанию или равны NULL. Фактически для параметров х, у, Width и Height используется значение – макрос CW_USEDEFAULT, которое позволяет системе самостоятельно выбирать координаты и размеры окна. Если окно не имеет родительского окна, как в случае нашей программы, то параметр hParent должен быть равен HWND_DESKTOP (или NULL, – это тоже допускается). Если окно не должно содержать главного меню, параметр hMenu должен равняться NULL. И в случае, когда не требуется дополнительная информация, как это чаще всего и бывает, параметр lpszAdditional должен быть NULL. (Тип LPVOID определен как void* при помощи typedef. Название LPVOID сложилось исторически и означает "длинный (far) указатель на тип void".)
Значение остальных четырех параметров необходимо установить в программе. Прежде всего, параметр lpszClassName должен представлять указатель на строку, содержащую имя класса окна (то самое, которое мы давали при регистрации класса), а параметр lpszWinName – указатель на строку-заголовок окна. Указатель может быть равен NULL, или эта строка может быть пустой, однако обычно окно имеет какой-нибудь заголовок.
Стиль (или тип) создаваемого окна определяется параметром dwStyle. В нашей программе используется макрос
WS_OVERLAPPEDWINDOW ,
который определяет стандартное окно, имеющее системное меню, заголовок, рамку для изменения размеров, а также кнопки минимизации, развертки и закрытия. Используемый стиль окна является наиболее общим. Вы можете создавать окна, имеющие другие стили. Для этого следует прибегнуть к комбинации стилевых макросов, которые Вам нужны. Такая комбинация строится при помощи оператора логического сложения. Некоторые широко используемые стили приведены в таблице 2.4.
Таблица 2.4