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 Если указан, то попытка перемещения курсора выше первого пункта или ниже последнего будет приводить к перемещению соответственно к последнему или к первому пункту.

Этот флаг рекомендуется ставить всегда, когда нет специальных причин его не ставить.

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