int WINAPI Menu( int PluginNumber, int X, int Y, int MaxHeight, DWORD Flags, const char *Title, const char *Bottom, const char *HelpTopic, const int *BreakKeys, int *BreakCode, const struct FarMenuItem *Item, int ItemsNumber );
-1.0.| Константа | Описание |
|---|---|
| FMENU_AUTOHIGHLIGHT | Если указан, то горячие клавиши будут назначены автоматически, начиная с первого пункта. |
| FMENU_CHANGECONSOLETITLE | Если указан, то FAR изменит заголовок консоли в значение, указанное в параметре Title (если Title не пуст). |
| FMENU_SHOWAMPERSAND | При показе меню не использовать амперсанды (&) для определения горячих клавиш. |
| FMENU_REVERSEAUTOHIGHLIGHT | Если указан, то горячие клавиши будут назначены автоматически, начиная с последнего пункта. |
| FMENU_USEEXT | Вместо структуры FarMenuItem использовать структуру FarMenuItemEx. |
| FMENU_WRAPMODE | Если указан, то попытка перемещения курсора
выше первого пункта или ниже последнего будет приводить к
перемещению соответственно к последнему или к первому пункту.
Этот флаг рекомендуется ставить всегда, когда нет специальных причин его не ставить. |
struct FarMenuItemEx FooEx[]={
...
};
Info.Menu(...,FMENU_USEEXT|...,(const struct FarMenuItem *)FooEx,...)
NULL, если заголовок
меню не нужен.NULL, если нижняя
строка меню не нужна.NULL, если подсказка не требуется.NULL. Старшее слово (high word) элемента
массива может быть или 0, или комбинацией флагов PKF_CONTROL,
PKF_ALT и PKF_SHIFT для описания комбинаций клавиш.
Например, в плагине MultiArc реакция на нажатие клавиши F4 в меню "Archive commands" (Shift-F3 на архиве) обрабатывается так:
int BreakCode;
int BreakKeys[2]={VK_F4,0};
ExitCode=Info.Menu(Info.ModuleNumber,-1,-1,0,FMENU_USEEXT|FMENU_WRAPMODE,
GetMsg(MArcCmdTitle),GetMsg(MSelectF4),"ArcCmd",BreakKeys,&BreakCode,
(struct FarMenuItem *)MenuItems,Count);
if(ExitCode>=0)
{
if(BreakCode == 0) // F4 pressed
{
GetFormatName(MenuItems[0].Text.Text);
ConfigCommands(MenuItems[0].Text.Text,2+MenuData[ExitCode].Cmd*2);
continue;
}
}
else
return FALSE;
NULL.struct FarMenuItem MenuItems[2];
memset(MenuItems,0,sizeof(MenuItems));
strcpy(MenuItems[0].Text,GetMsg(MCaseLower));
strcpy(MenuItems[1].Text,GetMsg(MCaseUpper));
MenuItems[0].Selected=TRUE;
int MenuCode=Info.Menu(Info.ModuleNumber,-1,-
1,0,FMENU_AUTOHIGHLIGHT|FMENU_WRAPMODE,
GetMsg(MCaseConversion),NULL,
"Contents",NULL,NULL,
MenuItems,
sizeof(MenuItems)/sizeof(MenuItems[0]));
if (MenuCode<0)
return(INVALID_HANDLE_VALUE);
. . .
Причем, Info определяется как глобальная переменная:
struct PluginStartupInfo Info;...а инициализируется она в функции SetStartupInfo:
void WINAPI _export SetStartupInfo(struct PluginStartupInfo *Info)
{
...
::Info=*Info;
...
}