- •Московская финансово-промышленная академия
- •Содержание
- •Глава 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.7. Определение класса окна
В первую очередь в WinMain() определяется и регистрируется класс окна. Класс окна определяется путем заполнения полей структуры WNDCLASS. Вот эти поля:
UINT style; // Тип окна
WNDPROC lpfnWndProc; // Адрес оконной функции
int cbClsExtra; // Дополнительные данные для класса
int cbWndExtra; // Дополнительные данные для окна
HINSTANCE hInstance; // Дескриптор данного экз. приложения
HICON hIcon; // Дескриптор иконки для данного окна
HCURSOR hCursor; // Дескриптор курсора для данного окна
HBRUSH hbrBackground;// Цвет заполнения окна
LPCSTR lpszMenuName; // Имя главного меню
LPCSTR lpszClassName; // Имя класса окна
Как видно из программы, поле hInstance принимает значение параметра hThisInst, имя класса окна lpszClassName получает адрес строки "МоеОкно", а адрес оконной функции присваивается переменной lpfnWndProc. Тип окна по умолчанию равен 0, и дополнительные данные для класса и окна не требуются.
Все Windows-приложения должны задавать форму курсора мыши и иконку для определяемого класса окна. Для этих целей приложение может использовать как собственные ресурсы, так и встроенные ресурсы Windows, как это делает наша программа. Иконка определяется при помощи функции API LoadIcon(), прототип которой приведен ниже:
HICON LoadIcon (HINSTANCE hInst, LPCSTR lpszName).
Эта функция возвращает дескриптор иконки. Параметр hInst специфицирует дескриптор данного экземпляра приложения, содержащего иконку, а имя иконки задается параметром lpszName. Для того чтобы использовать встроенные типы иконок Windows, первый параметр должен быть равен NULL, а в качестве второго параметра должен использоваться один из макросов таблицы 2.1.
Таблица 2.1
Значения параметра lpszName
№ |
Макрос |
Форма иконки |
1 |
IDI_APPLICATION |
Стандартная иконка приложения |
2 |
IDI_ASTERISK |
Иконка "информация" |
3 |
IDI_EXCLAMATION |
Иконка "восклицательный знак" |
4 |
IDI_HAND |
Иконка "знак Стоп" |
5 |
IDI_QUESTION |
Иконка "вопросительный знак" |
Для того чтобы определить курсор мыши, используется функция API LoadCursor(), имеющая следующий прототип:
HCURSOR LoadCursor(HINSTANCE hlnst, LPCSTR IpszName).
Эта функция возвращает дескриптор курсора. Параметр hInst задает дескриптор экземпляра приложения, содержащего курсор, a lpszName – имя необходимого ресурса. Для того чтобы использовать встроенный тип курсора Windows, следует задать NULL в первом параметре и макрос, определяющий курсор, – во втором. Некоторые наиболее употребляемые макросы для встроенных курсоров приведены ниже.
Таблица 2.2
Наиболее употребляемые макросы для встроенных курсоров
№ |
Макрос |
Форма курсора |
1 |
IDC_ARROW |
Стандартный курсор – стрелка |
2 |
IDC_CROSS |
Перекрестье |
3 |
IDC_IBEAM |
Вертикальная черта, используемая в редакторах |
4 |
IDC_WAIT |
"Песочные часы" |
Цвет заполнения окна, создаваемого в нашей программе, определен как белый, а дескриптор кисти получается при вызове функции API GetStockObject(). Кисть – это ресурс, определяющий цвет и способ заполнения объектов на экране. Функция GetStockObject() используется для получения дескрипторов стандартных ресурсов, определенных в системе и представляющих собой кисти, перья (перо применяется для рисования линий так же, как кисть – для заполнения объектов) и шрифты. Вот прототип этой функции:
HGDIOBJ GetStockObject(int object) .
Функция возвращает дескриптор объекта, задаваемого аргументом. (Тип HGDIOBJ является дескриптором GDI-объекта.) Следующая таблица представляет несколько типов системных кистей, которые Вы можете использовать.
Таблица 2.3