Определение меню приложения, включенное в файл ресурсов, может быть создано как вручную, так и при помощи редактора меню, входящего в состав редактора ресурсов.
Определение меню, которое помещается в файл ресурсов, должно иметь следующий формат:
MenuName MENU [опции загрузки] [опции памяти]
begin
MENUITEM «Item1», IDM_Item1
MENUITEM «Item2», IDM_Item2
...
POPUP «Item3»
begin
MENUITEM «Item3–1», IDM_Item3–1
MENUITEM «Item3–2», IDM_Item3–2
...
POPUP «Item3–6»
begin
MENUITEM «Item3–6–1», IDM_Item3–6–1
MENUITEM «Item3–6–2», IDM_Item3–6–2
...
end
...
end
...
end
Здесь MenuName – это имя ресурса–меню, подобно имени ресурсов–пиктограмм или ресурсов–курсоров, рассмотренных ранее. По этому имени можно обращаться к описанию меню из программы. Опции загрузки – PRELOAD или LOADNCALL – указывают, как следует поступить с ресурсом при загрузке приложения на выполнение. Если указать PRELOAD, то ресурс меню загружается при загрузке приложения автоматически, а при использовании ключа LOADNCALL ресурс меню загружается в память только по необходимости.
Опции памяти – FIXED, MOVEABLE и DISCARDABLE – управляют тем, как Windows должен «обращаться» с сегментом памяти, в который загружается ресурс, в процессе работы приложения. Опции FIXED запрещает Windows перемещать сегмент с ресурсом в памяти, опция MOEABLE явно разрешает перемещение сегмента при необходимости (но при этом сегмент считается неснимаемым), а опция DISCARDABLE указывает Windows, что он может удалять сегмент с ресурсом (меню) из памяти (сигмент с описанием ресурсов считается снимаемым). По умолчанию действуют опции MOVEABLE и DISCARDABLE. Если явно указывается опция DISCARDABLE, надо также указать MOVEABLE.
Пункты меню определяются между ключевыми словами BEGIN и END. Они могут быть двух типов – описанные ключевыми словами MENUITEM и POPUP. Пункт, описанный ключевым словом MENUITEM, является конечным пунктом меню; выбор этого пункта пользователем влечет за собой не переход на более низкий уровень меню, а передачу функции окна сообщения WM_COMMAND, в параметр wParam которого помещен идентификатор wID.
MENUITEM «&Пункт», wID ,опции
Всем пунктам меню можно назначать опции, определяющие свойства пунктов меню при начальной згрузке (в последствии эти свойства могут быть изменены):
GRAYED
Пункт меню неактивный (не вырабатывает сообщений WM_COMMAND при выборе его пользователем). Текст пункта отображается на экране в сером цвете.
INACTIVE
Пункт меню неактивный (не вырабатывает сообщений WM_COMMAND при выборе его пользователем). Отображает он, однако, так же, как и активный.
NENUBREAK
Это и следущие за ним пункты меню отображаются в новом столбце(если указан для главного меню, то в новой строке).
MENUBARBREAK
Это и следущие за ним пункты меню отображаются в новом столбце(если указан для главного меню, то в новой строке); предидущий и новый столбец (строка) разделяются вертикальной чертой.
CHECKED
Пункт меню помечен галочкой, помещенной слева от него. Этот флаг не используется для пунктов главного меню приложения.
SEPARATOR
Это ключевое слово указывается без пункта меню, поскольку определяет разделитель (горизонтальную линию), которым выделяются в группы связанные пункты меню.
HELP
пункт меню выравнивается по правой стороне меню.
Опции, перечисленные выше, могут комбинироваться при описании меню с помощью булевой операции «ИЛИ» (символ ч ); нельзя только комбинировать опции GRAYED и INACTIVE, а также опции MENUBREAK и MENUBARBREAK.
Величина wID в предложении MENUITEM определяет число, которое Windows передает приложению через сообщение WM_COMMAND от меню. Идентификатор пункта меню wID должен быть уникальным; идентификаторы, как правило, определяются отдельно, в специальном включающем файле.
Пункт, описанный ключевым словом POPUP, является заголовком подменю; при выборе этого пункта пользователем сообщение WM_COMMAND функции окна не передается (и поэтому здесь идентификатор wID не нужен), а открывается подменю, пункты которого также описаны ключевыми словами BEGIN и END:
POPUP «&Пункт», опции
BEGIN
...
END
Для пунктов, описанных ключевым словом POPUP, можно использовать те же опции, что и для пунктов MENUITEM.
Та буква в названии меню, перед которой указан символ амперсанта (&), при выводе меню автоматически выделяется подчеркиванием, и ее нажатие (вместе с клавишей Alt) приводит к выбору данного пункта. Если не включать в наименование пункта значок амперсанта, то Windows не будет подчеркивать символы текста, а с клавишей Alt можно будет использовать первый символ текста.