XplmmenuAPI

插件可以在 X-Plane 的菜单栏中创建菜单。这是通过创建菜单,然后创建项目来完成的。菜单由一个不透明的 ID 引用。项目由 (从零开始) 索引号引用。

菜单是 “沙盒” 插件之间-没有插件可以访问任何其他插件的菜单。此外,所有菜单索引仅与您的插件菜单相关; 如果您的插件在不同时间在插件菜单中创建了两个子菜单, 有多少其他插件也在中间时间创建插件的子菜单并不重要: 您的子菜单将被赋予菜单索引 0 和 1。(SDK 在后端做一些工作来过滤掉与你的插件无关的菜单,以便为每个插件提供这种一致性。))

当您创建一个菜单项时,您指定我们应该如何处理该菜单项上的点击。您可以让 XPLM 触发回调 (XPLMMenuHandler_f与包含项的菜单相关联),或者您可以简单地触发命令 (不调用菜单处理程序)。后一种方法的优点是 X-Plane 将显示与命令相关联的任何键盘快捷键。(相比之下,没有与具有特定参数的菜单处理程序回调相关联的键盘快捷键。)

X-Plane 中的菜单文本为 UTF8; X-Plane 的字符集包括拉丁文、希腊文和西里尔文字符、片假名以及一些日文符号。一些 api 有一个 indeprecatededignored 参数,用于选择字符集; 因为 X-Plane 9 所有的定位都是通过 UTF-8 完成的。

XPLMMenuCheck

这些枚举定义了 X 平面菜单的各种 “检查” 状态。X 平面中的 “检查” 实际上是一盏灯,它可能会亮,也可能不会亮。所以有三种可能的状态。

名称 描述
Xplm_Menu_NoCheck “0” 菜单项左侧没有符号。
Xplm_Menu_Unchecked “1” 菜单旁边有一个未标记的标记 (不亮)。
Xplm_Menu_Checked “2” 菜单旁边有一个被选中的标记 (点亮)。

XPLMMenuID

类型无效 *XPLMMenuID;

这是您创建的每个菜单的唯一 ID。

XPLMMenuHandler_f

Typedef void (*XPLMMenuHandler_f) (Void * inMenuRef,void * inItemRef);

菜单处理程序函数采用两个引用指针,一个用于菜单 (在创建菜单时指定),另一个用于项目 (在创建菜单时指定)。

XPLMFindPluginsMenu

XPLM_APIXPLMMenuIDXPLMFindPluginsMenu(无效);

此函数返回在启动时为您创建的插件菜单的 ID。

XPLMFindAircraftMenu

XPLM_APIXPLMMenuIDXPLMFindAircraftMenu(无效);

此函数返回当前加载的飞机的菜单 ID,用于显示飞机特定的命令。

飞机菜单是由 X-Plane 在启动时创建的,但在通过XPLMAppendMenuItem() 或XPLMAppendMenuItemWithCommand()。

只有加载了用户当前飞机的插件才能访问飞机菜单。对于所有其他插件,这将返回 NULL,并且任何向它添加菜单项的尝试都将失败。

XPLMCreateMenu

XPLM_APIXPLMMenuIDXPLMCreateMenu(Const char * inName,XPLMMenuIDInParentMenu,inParentItem 诠释,XPLMMenuHandler_fInHandler,void * inMenuRef);

此函数创建一个新菜单并返回其 ID。如果无法创建菜单,则返回 NULL。传递父菜单 ID 和项目索引以创建子菜单,或者传递父菜单以将菜单放入菜单栏中的 NULL。只有当菜单在菜单栏中时,才使用菜单的名称。您还传递一个处理程序函数和一个菜单引用值。如果不需要来自菜单的回调 (例如,如果它只包含子菜单),则为处理程序传递 NULL。

重要提示: 您必须传递一个有效的、非空的菜单标题,即使该菜单是标题不可见的子菜单。

XPLMDestroyMenu

XPLM_API voidXPLMDestroyMenu(XPLMMenuIDInMenuID);

此函数将销毁您创建的菜单。如有必要,使用此选项删除子菜单。(通常这个函数是不必要的。)

XPLMClearAllMenuItems

XPLM_API voidXPLMClearAllMenuItems(XPLMMenuIDInMenuID);

此函数从菜单中删除所有菜单项,允许您重建它。如果您需要更改菜单上的项目数,请使用此功能。

XPLMAppendMenuItem

XPLM_API intXPLMAppendMenuItem(XPLMMenuIDInMenu,const char * inItemName,void * inItemRef,int inDeprecatedAndIgnored);

此例程将新菜单项附加到菜单底部并返回其索引。传递菜单以添加该项目、项目名称和该项目的 void * ref。

如果追加失败 (由于父菜单参数无效),则返回负索引。

请注意,返回的所有菜单索引仅与您的插件菜单相关; 如果您的插件在不同时间在插件菜单中创建了两个子菜单, 有多少其他插件也在中间时间创建插件的子菜单并不重要: 您的子菜单将被赋予菜单索引 0 和 1。(SDK 在后端做一些工作来过滤掉与你的插件无关的菜单,以便为每个插件提供这种一致性。))

XPLMAppendMenuItemWithCommand

XPLM_API intXPLMAppendMenuItemWithCommand(XPLMMenuIDInMenu,const char * inItemName,XPLMCommandRefInCommandToExecute);

XPLMAppendMenuItem(),而不是新的菜单项触发XPLMMenuHandler_f在 container 菜单中,它将简单地执行您传入的命令。为菜单项使用命令允许用户将键盘快捷方式绑定到命令,并查看菜单中表示的快捷方式。

如果追加失败 (由于父菜单参数无效),则返回负索引。

XPLMAppendMenuItem(),所有菜单索引仅与插件的菜单相关。

XPLMAppendMenuSeparator

XPLM_API voidXPLMAppendMenuSeparator(XPLMMenuIDInMenu);

此例程在菜单的末尾添加分隔符。

如果追加失败 (由于父菜单参数无效),则返回负索引。

XPLMSetMenuItemName

XPLM_API voidXPLMSetMenuItemName(XPLMMenuIDInMenu,int inIndex,const char * inItemName,int inDeprecatedAndIgnored);

此例程更改现有菜单项的名称。传递菜单 ID 和菜单项的索引。

XPLMCheckMenuItem

XPLM_API voidXPLMCheckMenuItem(XPLMMenuIDInMenu,诠释指数,XPLMMenuCheckInCheck);

设置是否选中菜单项。传递菜单 ID 和项目索引。

XPLMCheckMenuItemState

XPLM_API voidXPLMCheckMenuItemState(XPLMMenuIDInMenu,诠释指数,XPLMMenuCheck* OutCheck);

此例程返回菜单项是否被选中。菜单项的复选标记可能是打开或关闭,或者菜单可能根本没有图标。

XPLMEnableMenuItem

XPLM_API voidXPLMEnableMenuItem(XPLMMenuIDInMenu,int 索引,启用 int);

设置是否启用此菜单项。项目启动已启用。

XPLMRemoveMenuItem

XPLM_API voidXPLMRemoveMenuItem(XPLMMenuIDInMenu,int inIndex);

从菜单中删除一项。请注意,下面的所有菜单项都向上移动一个; 你的插件必须跟踪索引号的变化。