Формирование и использование меню. Краткая теория, страница 4

mf_ByCommand: Команда меню указана с помощью идентификатора;

mf_ByPosition: Команда меню указана номером, где первой команде меню соответствует 0;

mf_Checked: Рядом с командой отображается специальный символ (маркер);

mf_Disabled: Команда меню отменена;

mf_Enabled: Команда меню разрешена;

mf_Grayed: Команда меню неактивна;

mf_Help: Команда меню - элемент справочной системы;

mf_Hilite: Выделение цветом команды меню;

mf_MenuBarBreak: Меню помещается в отдельную колонку, отделенную вертикальной чертой;

mf_MenuBreak: Меню помещается в отдельную колонку;

mf_MouseSelect: Команда была выбрана манипулятором "мышь";

mf_OwnerDraw: Команда меню отображается программой-владельцем меню;

mf_Popup: Новая команда меню включает подменю;

mf_Separator. Отображается горизонтальная разделительная черта;

mf_String: Новая команда меню - строка;

mf _SysMenu: Команда меню входит в системое меню;

mf_Unchecked: Удаляет специальный символ рядом с названием команды меню;

mf_Unhilite: Прекращается выделение цветом команды меню.

Примечание: Использование ряда флагов будет рассмотрено ниже.

Установка и удаление отметки команды меню

Для того чтобы отметить, что пользователь выбрал команду меню, можно отобразить специальный символ рядом с названием этой команды. Чтобы отметить команду меню, используется функция CheckMenuItem:

CheckMenultem(MyMenu, idm_XXX, mf_Checked);

а для того, чтобы удалить отметку, используется следующий вызов функции:

CheckMenultem(MyMenu, idm_XXX, mf_UnChecked);

Добавление команд к меню

Имеется возможность добавления новых команд меню в конец и в любое место меню. Для этого используются функции AppendMenu и InsertMenu соответственно.

Ниже приведен пример добавления команды в конец существующего меню:

AppendMenu(MyMenu, mf_Enabled, idm_XXX, 'Newltem');

Для добавления новой команды в указанное место существующего меню используется следующий вызов функции InsertMenu:

lnsertMenu(MyMenu, idm_YYY, mf_ByCommand OR mf_Enabled, idm_XXX, 'Newltem');

Данный вызов функции вставляет команду idm_XXX перед существующей командой меню idm_YYY.

В следующем примере новая команда idm_XXX вставляется таким образом, что она становится третьей командой в меню MyMenu:

lnsertMenu(MyMenu, 2, mf_ByPos!tion OR mf_Grayed, idm_XXX,'Newltem');

Напомним, что первая команда меню имеет номер 0, вторая - 1 и т.д.

Изменение существующего меню

С помощью функции ModifyMenu можно изменять как существующие меню, так и команды меню, Ниже показано, как с помощью функции ModifyMenu изменить команду существующего меню idm_XXX на команду idm_YYY:

ModifyMenu(MyMenu, idm_XXX, mf_ByCommand, idm_YYY, 'Newltem');

Эта функция указывает ядру Windows на необходимость изменения существующей команды меню на новую команду. Третий, четвертый и пятый параметры указывают атрибуты новой команды.

Удаление команды из меню

С помощью функции DeleteMenu можно удалить любую команду из существующего меню. Ниже показано использование этой функции:

DeleteMenufMyMenu, 1, mf_ByPosltion);

В этом примере из существующего меню, определяемого ссылкой MyMenu, удаляется вторая команда. Таким образом, третья команда становится второй и т.д. Также можно удалить команду меню, указав ее идентификатор:

DeleteMenu(MuMenu, ldm_XXX, mf_ByCommand);

Перерисовка меню

После выполнения операций, связанных с изменением меню, требуется перерисовка меню. Для выполения этой операции служит функция DrawMenuBar. В качестве параметра этой функции передается ссылка на окно, которому принадлежит меню.

Использование растровых графических изображений в меню

Возможно использование растровых графических изображений в качестве команд меню. Это можно сделать двумя способами: