- •Московская финансово-промышленная академия
- •Содержание
- •Глава 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. Линейки прокрутки
Параметры menu
№ |
Параметр |
Возвращаемое значение |
1 |
DISCARDABLE |
Неиспользуемое меню может быть удалено из памяти |
2 |
FIXED |
Меню фиксировано в памяти |
3 |
LOADONCALL |
Меню загружается только перед непосредственным использованием |
4 |
MOVEABLE |
Меню может перемещаться в памяти |
5 |
PRELOAD |
Меню загружается в момент старта программы |
В Windows имеется два типа элементов меню: MENUITEM и POPUP. Элемент MENUITEM определяет обычный элемент меню, а POPUP –специфицирует выпадающее подменю, которое может в свою очередь содержать элементы типа MENUITEM и POPUP. Общая форма соответствующих операторов следующая:
MENUITEM "Имя", MenuID[,параметры]
POPUP "имя" [,параметры]
Здесь Имя является именем элемента меню, например Файл или Помощь. MenuID – это уникальный целочисленный идентификатор, ассоциированный с данным элементом меню; этот идентификатор передается в программу, если пользователь выбирает этот элемент меню. Обычно такие идентификаторы определяются как макроимена в отдельном файле, включаемом и в программу, и в RC-файл. Значение параметров (определенные в Windows.h) приводятся в таблице 4.4.
Таблица 4.4
Параметры элементов меню
№ |
Параметр |
Назначение |
1 |
CHECKED |
Рядом с именем меню отображается отметка ("птичка"); не применимо к элементам меню верхнего уровня |
2 |
GRAYED |
Элемент меню недоступен (не может быть выбран) и отображается серым цветом |
3 |
HELP |
Может быть связан с элементом Помощь. Применимо только к элементам типа MENUITEM |
4 |
MENUBARBREAK |
Для горизонтальных меню верхнего уровня приводит к размещению элемента в новой строке, а для выпадающих меню – к размещению элемента в новой колонке. В последнем случае колонки разделяются вертикальной линией |
5 |
MENUBREA |
То же, что и MENUBARBREAK, за исключением того, что в этом случае не используется разделительная линия |
Ниже приведен фрагмент программы создания меню, который Вам придется сейчас набрать. Назовем этот файл Menu.rc:
// Пример файла ресурсов, описывающего меню
#include "Menu.h"
MYMENU MENU
{
POPUP "&Раз"
{
MENUITEM "&Альфа", IDM_ALPHA
MENUITEM "&Бета", IDM_BETA
}
POPUP "&Два"
{
MENUITEM "&Гамма", IDM_GAMMA
POPUP "&Дельта"
{
MENUITEM "&Эпсилон", IDM_EPSILON
MENUITEM "&3ета", IDM_ZETA
}
MENUITEM "&Эта", IDM_ETA
MENUITEM "&Тэта", IDM_THETA
}
MENUITEM "&Помощь", IDM_HELP
}
Это меню с именем MYMENU содержит три команды верхнего уровня: Раз, Два и Помощь. Выбор Раз и Два открывает соответствующие выпадающие подменю. Команда Дельта в свою очередь активизирует выпадающие подменю. Заметьте, что команды, вызывающие выпадающие подменю, не имеют ассоциированных с ними идентификаторов. В этом меню все идентификаторы элементов представляют собой макроимена, начинающиеся с префикса IDM (эти макроимена определены во включаемом файле Menu.h). Вообще же можно выбирать макроимена и их префиксы по своему усмотрению.
Знак «коньюнкции» & в имени элемента меню означает, что буква, следующая за ним, является «горячей клавишей» для выбора данного элемента. То есть, когда соответствующее меню становится активным, нажатие «горячей клавиши» приводит к выбору элемента меню. «Горячая клавиша» не обязательно должна быть первой буквой в имени элемента меню, но она не должна дублировать «горячие клавиши» других элементов этого меню.
Файл Menu.h должен содержать определения макроимен идентификаторов элементов меню. Введите его:
#define IDM_ALPHA 101
#define IDM_BETA 102
#define IDM_GAMMA 103
#define IDM_EPSILON 104
#define IDM_ZETA 105
#define IDM_ETA 106
#define IDM_THETA 107
#define IDM_HELP 108
Этот файл содержит идентификаторы, которые будут передаваться в Вашу программу при выборе соответствующих команд меню. Он будет включен также в программу, использующую меню. Помните, что макроимена и их значения можно выбирать по своему усмотрению, но каждое значение должно быть уникальным. Кроме того, значения идентификаторов должны быть в пределах от 0 до 65535.