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
, если пользователь отменил меню, или номер выбранного элемента меню.
Пример
Смотрите также: