Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
System programming / Конспект лекций / Лекция 8 Ресурсы часть 2.doc
Скачиваний:
45
Добавлен:
08.05.2015
Размер:
83.97 Кб
Скачать

Структура меню

Если вы создаете или изменяете меню программы, полезно разделять глав­ное меню и все всплывающие меню. У главного меню имеется описатель меню, у каждого всплывающего меню внутри главного меню имеется собст­венный описатель меню, и у системного меню (тоже являющегося всплы­вающим меню) тоже имеется описатель меню.

Каждый пункт меню определяется тремя характеристиками. Первая характе­ристика определяет то, что будет отображено в меню. Это либо строка текста, либо битовый образ. Вторая характеристика определяет либо идентификатор, который Windows посылает вашей программе в сообщении WM_COMMAND, либо всплывающее меню, которое Windows выводит на экран, когда пользова­тель выбирает данный пункт меню. Третья характеристика описывает атрибут пункта меню, включая то, является ли данный пункт запрещенным, недоступ­ным или помеченным.

Шаблон меню

Меню можно создать тремя разными способами. Наиболее обычным (и самым простым) является определение меню в файле описания ресурсов, для чего можно использовать редактор ресурсов, прилагаемый к современным пакетам программирования, либо непосредственно в текстовом виде в форме шаблона меню, например:

MyMenu MENU

{ [список элементов меню]

}

MyMenu это имя меню. Вы ссылаетесь на это имя в структуре класса окна. Обычно имя меню такое же, как имя приложения. Внутри квадратных скобок можно использовать либо инструкцию MENUITEM, либо POPUP. Инструкция MENUITEM имеет следующий формат:

MENUITEM "SText", id [, признаки]

Формат инструкции POPUP:

POPUP "SText" [, признаки]

{

[список элементов меню]

}

Вместо фигурных скобок можно использовать ключевые слова BEGIN и END. Текст, выводимый для каждого пункта меню должен быть заключен в парные кавычки. Амперсант (&) вызывает подчеркивание следующего за ним символа при выводе на экран. Windows ищет этот же символ, когда пользова­тель выбирает элемент меню с использованием клавиши <Alt>. Если не включить амперсант в текст, то в тексте меню не будет подчеркнутых симво­лов, и Windows будет использовать первую букву текста при поиске.

Признаками в операторах MENUITEM и POPUP, которые появляются в списке главного меню, являются следующие:

• GRAYED — Данный пункт меню недоступен и не генерирует сообщений WM_COMMAND. Текст изображается недоступным (серым цветом).

• INACTIVE — Данный пункт меню неактивен и не генерирует сообщений WM_COMMAND. Текст изображается обычным образом.

• MENUBREAK — Данный пункт меню, а также все последующие появ­ляются на экране в новой строке меню.

• HELP — Данный пункт меню, а также все последующие появляются на экране, выровненными по правому краю.

Признаки могут комбинироваться с помощью символа поразрядной опера­ции OR языка С (|), но опции GRAYED и INACTIVE нельзя использовать вместе. Опция MENUBREAK не используется в главном меню, поскольку Windows автоматически создает новую строку главного меню, если окно слишком узкое для размещения всех пунктов меню в одну строку.

Следующие за инструкцией POPUP в главном меню квадратные скобки (или ключевые слова BEGIN и END) ограничивают список пунктов всплы­вающего меню. При определении всплывающего меню допускаются сле­дующие инструкции:

MENUITEM "text", id [, признаки] а также:

MENUITEM SEPARATOR

а также:

POPUP "text" [, признаки]

MENUITEM SEPARATOR рисует во всплывающем меню горизонтальную черту. Эта черта часто используется для разделения групп, связанных по смыслу и назначению опций.

Для пунктов всплывающего меню в строке символов можно использовать символ табуляции \t для разделения текста по столбцам. Текст, следующий за символом \t располагается в новом столбце, с достаточным отступом вправо для размещения в первом столбце всплывающего меню самой длин­ной строки текста. Символ \а выравнивает следующий за ним текст по правому краю. Признаками в инструкциях MENUITEM, относящихся к всплывающим меню, являются следующие:

• CHECKED — Слева от текста появляется метка ("галочка").

• GRAYED — Данный пункт меню недоступен и не генерирует сообщений WM_COMMAND. Текст изображается недоступным (серым цветом).

• INACTIVE — Данный пункт меню неактивен и не генерирует сообщений WM_COMMAND. Текст изображается обычным образом.

• MENUBREAK — Данный пункт меню, а также все последующие появ­ляются на экране в новом столбце.

• MENUBARBREAK — Данный пункт меню, а также все последующие появляются на экране в новом столбце. Столбцы разделяются между со­бой вертикальной чертой.

Опции GRAYED и INACTIVE нельзя использовать вместе. Опции MENUBREAK и MENUBARBREAK нельзя использовать вместе. Если число пунктов всплывающего меню больше, чем можно разместить в одном столбце, необходимо использовать либо MENUBREAK, либо MENUBARBREAK.

Значения идентификаторов в инструкциях MENUITEM — это числа, кото­рые Windows посылает оконной процедуре в сообщениях меню. Значение идентификатора должно быть уникальным в рамках меню. Вместо чисел может оказаться удобнее использовать идентификаторы, определенные в заголовочном файле. По договоренности эти идентификаторы начинаются с символов IDM (ID for a menu, идентификатор меню).