# Menu

Функция `Menu` показывает меню.

    intptr_t WINAPI Menu(
      const GUID *PluginId,
      const GUID *Id,
      intptr_t X,
      intptr_t Y,
      intptr_t MaxHeight,
      FARMENUFLAGS Flags,
      const wchar_t *Title,
      const wchar_t *Bottom,
      const wchar_t *HelpTopic,
      const struct FarKey *BreakKeys,
      intptr_t *BreakCode,
      const struct FarMenuItem *Item,
      size_t ItemsNumber
    );

### Параметры

PluginId
Указатель на GUID плагина (для вашего плагина, GUID должен быть таким же, что и в поле `GlobalInfo.Guid` функции GetGlobalInfoW).
Id
Указатель на GUID текущего меню. GUID должен быть уникальным.
X,Y
Координаты верхнего левого угла меню.
Чтобы назначить их автоматически, приравняйте их `-1`.
MaxHeight
Максимальное количество видимых на экране пунктов меню. Если высота меню меньше, чем число пунктов, то появится полоса прокрутки.
Чтобы использовать максимально возможное значение, установите этот параметр равным `0`.
Flags
Может быть комбинацией из следующих значений (перечисление FARMENUFLAGS):

Константа | Описание
--- | ---
FMENU_AUTOHIGHLIGHT | Если указан, то горячие клавиши будут назначены автоматически, начиная с первого пункта.
FMENU_CHANGECONSOLETITLE | Если указан, то Far Manager изменит заголовок консоли в значение, указанное в параметре `Title` (если `Title` не пуст).
FMENU_SHOWAMPERSAND | При показе меню не использовать амперсанды (`&`) для определения горячих клавиш.
FMENU_REVERSEAUTOHIGHLIGHT | Если указан, то горячие клавиши будут назначены автоматически, начиная с последнего пункта.
FMENU_NONE | Нулевой флаг.
FMENU_WRAPMODE | Если указан, то попытка перемещения курсора выше первого пункта или ниже последнего будет приводить к перемещению соответственно к последнему или к первому пункту. Этот флаг рекомендуется ставить всегда, когда нет специальных причин его не ставить.
FMENU_SHOWNOBOX | Меню будет выведено без рамки.
FMENU_SHOWSHORTBOX | Рамка меню будет выведена без окружающих пробелов.
FMENU_SHOWSINGLEBOX | Будет выведена одинарная рамка меню (по умолчанию - двойная).
FMENU_NODRAWSHADOW | Меню будет выведено без тени.

Title
Заголовок меню. Укажите `NULL`, если заголовок меню не нужен.
Bottom
Нижняя строка меню. Укажите `NULL`, если нижняя строка меню не нужна.
HelpTopic
Тема в файле помощи, ассоциированная с меню. Может быть `NULL`, если подсказка не требуется.
BreakKeys
Адрес массива с кодами виртуальных клавиш типа FarKey, которые будут закрывать меню. Конец массива определяется дополнительным элементом, у которого значение поля `VirtualKeyCode` должно быть равно 0. Если вам не нужно определять такие клавиши в дополнение к стандартным (`Enter`, `Esc` и `F10`),установите этот параметр в `NULL`.

Например, реакция на нажатие клавиши `F4` в меню обрабатывается так:

    int BreakCode;
    struct FarKey BreakKeys[] = {{VK_F4,0},{0,0}};
    ExitCode=Info.Menu(&MainGUID,&MenuGUID,-1,-1,0,FMENU_WRAPMODE,GetMsg(MArcCmdTitle),GetMsg(MSelectF4),L"ArcCmd",BreakKeys,&BreakCode,MenuItems,Count);
    if(ExitCode>=0)
    {
      if(BreakCode == 0)  // F4 pressed
      {
        GetFormatName(MenuItems[0].Text);
        ConfigCommands(MenuItems[0].Text,2+MenuData[ExitCode].Cmd*2);
        continue;
      }
    }
    else
      return FALSE;

BreakCode
Адрес переменной, в которую будет записан номер элемента массива `BreakKeys`, использованного для закрытия меню, или `-1`, если меню было закрыто одной из стандартных клавиш. Этот параметр может быть равным `NULL`.
Item
Адрес массива структур FarMenuItem. Каждая структура описывает элемент меню.
ItemsNumber
Количество структур FarMenuItem.

### Возвращаемое значение

Функция возвращает или `-1`, если пользователь отменил меню, или номер выбранного элемента меню.

### Пример

Смотрите также:
FarMenuItem