主要内容

向模型编辑器菜单中添加项目

您可以向Simulink的上下文菜单中添加命令和子菜单万博1manbetx®编辑器和状态流®编辑器。菜单栏自定义功能将在未来的版本中被移除。若要自定义Simulink工具条,万博1manbetx请使用自定义选项卡。有关自定义选项卡的详细信息,请参见创建自定义Simulink工万博1manbetx具条选项卡.若要将现有工具栏菜单转换为工具条选项卡,请使用slConvertCustomMenus

向菜单中添加一项:

  1. 为每一项创建一个函数,称为模式的功能,定义该项(参见定义菜单项).

  2. 在启动时向Simulink定制管理器注册菜单定制万博1manbetxsl_customization.mMATLAB文件®路径(见注册菜单自定义).

  3. 创建实现由添加到菜单中的项触发的命令的回调函数。

添加菜单项的代码

以下sl_customization.m文件将向右键单击Simulink Editor画布时出现的上下文菜单的底部添加四个项。万博1manbetx

函数sl_customization (cm)注册自定义菜单功能。cm.addCustomMenuFcn (“万博1manbetx模型:快捷菜单”, @getMyMenuItems);结束定义自定义菜单函数。函数schemaFcns = getMyMenuItems(callbackInfo) schemaFcns = {@getItem1,...@getItem2,...{@getItem3 3},...将3作为用户数据传递给getItem3。@getItem4};结束为第一个菜单项定义模式函数。函数schema = getItem1(callbackInfo);模式。标签=“项目一”;模式。用户数据=“项目一”;模式。callback = @myCallback1;结束函数myCallback1 (callbackInfo) disp (['Callback for item 'callbackInfo.userdata' was called']);结束函数schema = getItem2(callbackInfo)制作一个子菜单标签“Item Two”%菜单项超过三次。Schema = sl_container_schema;模式。标签=“两项”;模式。childrenFcns = {@getItem1, @getItem1, @getItem1};结束函数schema = getItem3(callbackInfo)创建一个标签为的菜单项% 'Item Three: 3',其中3被传递%从上面的getMyItems。Schema = sl_action_schema;模式。标签=[“第三项:”num2str (callbackInfo.userdata)];结束函数myToggleCallback (callbackInfo)如果比较字符串(get_param (gcs,“ScreenColor”),“红色”set_param(gcs,“ScreenColor”“红色”);其他的set_param (gcs,“ScreenColor”“白色”);结束结束为切换菜单项定义模式函数。函数schema = getItem4(callbackInfo) schema = sl_toggle_schema;模式。标签=“红色屏幕”如果比较字符串(get_param (gcs,“ScreenColor”),“红色”) == 1模式。检查=“检查”其他的模式。检查=“不”结束模式。callback = @myToggleCallback;结束

定义菜单项

定义菜单项的方法是创建一个函数,该函数返回一个名为模式对象,它指定创建菜单项所需的信息。您定义的菜单项可以触发自定义操作或显示自定义子菜单。有关更多信息,请参阅以下部分。

定义触发自定义命令的菜单项

要定义触发自定义命令的项,模式函数必须接受回调信息对象(请参阅回调信息对象)并创建并返回一个操作模式对象(参见操作模式对象),指定项目标签和一个函数,称为回调,在用户选择项时调用。例如,下面的模式函数定义了一个菜单项,该菜单项在用户选择时显示一条消息。

function schema = getItem1(callbackInfo)Schema = sl_action_schema;指定菜单项标签。模式。标签='My Item 1'; schema.userdata = 'item1'; %% Specify the menu item callback function. schema.callback = @myCallback1; end function myCallback1(callbackInfo) disp(['Callback for item ' callbackInfo.userdata ' was called']); end

操作架构对象。该对象指定有关触发您定义的命令的菜单项的信息,包括出现在菜单项上的标签以及当用户选择菜单项时要调用的函数。使用函数sl_action_schema在模式函数中创建此对象的实例。其特性包括:

财产 描述
标签

例如,标识此操作的可选字符向量,以便筛选器函数可以引用它。

标签

字符向量,指定出现在触发此操作的菜单项上的标签。

状态

属性,该属性指定此操作的状态。有效值为:

  • “启用”(默认)-操作显示在菜单中,可以选择

  • “禁用”—操作显示在菜单中,但不能选择

  • “隐藏”—该操作没有出现在菜单中

statustip

字符向量,指定当用户选择触发此操作的菜单项时出现在编辑器状态栏中的文本。

用户数据

您指定的数据,可以是任何类型。

加速器

字符向量,指定Ctrl和用于触发此操作的键组合。您只能为出现在菜单栏菜单上的自定义菜单项(将被删除)添加键盘快捷键,并且不能重定义Simulink编辑器附带的加速器。万博1manbetx例如,Ctrl + D是一种加速器更新图在Simuli万博1manbetxnk编辑器中,因此不能重新定义它。

要指定此值,请使用表单“Ctrl +K,在那里K是快捷键。例如,使用“Ctrl + Alt + T”用于按下启动的加速器Ctrl而且Alt和紧迫T

回调

字符向量,指定要计算的MATLAB表达式或当用户选择触发此操作的菜单项时要调用的函数句柄。这个函数必须接受一个参数:一个回调信息对象。

autoDisableWhen

属性,该属性控制何时自动禁用菜单项。

  • “锁定”(默认)-当活动编辑器被锁定或当模型繁忙时

  • “忙”—仅当模型处于繁忙状态时

  • “永远”——永远

切换架构对象。该对象指定关于打开或关闭某个对象的菜单项的信息。使用函数sl_toggle_schema在模式函数中创建此对象的实例。其特性包括:

财产 描述
标签

例如,标识此切换操作的可选字符向量,以便筛选器函数可以引用它。

标签

字符向量,指定出现在触发此切换操作的菜单项上的标签。

检查

指定菜单项是否显示复选标记。有效值为“不”(默认),“检查”

状态

属性,该属性指定此切换操作的状态。有效值为:

  • “启用”(默认)-操作显示在菜单中,可以选择

  • “禁用”—操作显示在菜单中,但不能选择

  • “隐藏”—该操作没有出现在菜单中

statustip

字符向量,指定当用户选择触发此切换操作的菜单项时出现在编辑器状态栏中的文本。

用户数据

您指定的数据,可以是任何类型。

加速器

字符向量,指定Ctrl和用于触发此操作的键组合。您只能为出现在菜单栏菜单上的自定义菜单项(将被删除)添加键盘快捷键,并且不能重定义Simulink编辑器附带的加速器。万博1manbetx例如,Ctrl + D是一种加速器更新图在Simuli万博1manbetxnk编辑器中,因此不能重新定义它。

要指定此值,请使用表单“Ctrl +K,在那里K是快捷键。例如,使用“Ctrl + Alt + T”用于按下启动的加速器Ctrl而且Alt和紧迫T

回调

字符向量,指定要计算的MATLAB表达式或当用户选择触发此操作的菜单项时要调用的函数句柄。这个函数必须接受一个参数:一个回调信息对象。

autoDisableWhen

属性,该属性控制何时自动禁用菜单项。

  • “锁定”(默认)-当活动编辑器被锁定或当模型繁忙时

  • “忙”—仅当模型处于繁忙状态时

  • “永远”——永远

定义自定义子菜单

若要定义子菜单,请创建一个模式函数,该函数接受回调信息对象并返回容器模式对象(参见容器架构对象),指定定义子菜单项的模式。例如,下面的模式函数定义了一个子菜单,其中包含示例中定义的菜单项的三个实例定义触发自定义命令的菜单项

函数模式= getItem2(callbackInfo)模式= sl_container_schema模式。标签=“两项”;模式。childrenFcns = {@getItem1, @getItem1, @getItem1};结束

容器架构对象。容器模式对象指定子菜单标签及其内容。使用函数sl_container_schema在模式函数中创建此对象的实例。对象的属性包括:

财产 描述
标签

标识此子菜单的可选字符向量。

标签

指定子菜单标签的字符向量。

状态

指定此子菜单状态的字符向量。有效值为“启用”(默认),“禁用”,“隐藏”

statustip

字符向量,指定当用户选择此子菜单时出现在编辑器状态栏中的文本。

childrenFcns

单元格数组,它指定子菜单的内容。单元格数组中的每个条目可以是:

  • 指向模式函数的指针,该函数定义子菜单上的项(请参阅定义菜单项).

  • 两元素单元格数组,其第一个元素是指向定义项项的模式函数的指针,第二个元素是要作为用户数据插入回调信息对象中的数据(参见回调信息对象)传递给schema函数。

  • “分隔符”,这将导致在单元格数组中前一个条目定义的项与下一个条目定义的项之间出现分隔符。对于这个条目,将忽略大小写(例如,“分隔符”而且“分隔符”都是有效的条目)。如果分隔符出现在子菜单的开头或结尾,并且将依次出现的分隔符组合成单个分隔符(例如,由于项被隐藏),分隔符也会被抑制。

例如,这个单元格数组指定了两个子菜单项:

{@getItem1, 'separator', {@getItem2, 1}}

在本例中,1被传递给getItem2通过回调信息对象。

generateFcn

指向一个函数的指针,该函数返回定义子菜单内容的单元格数组。单元格数组必须与容器模式对象指定的格式相同childrenFcns财产。

generateFcn属性优先于childrenFcns财产。如果同时设置,则childrenFcns属性返回的单元格数组generateFcn用于创建子菜单。

用户数据

传递给的任何类型的数据generateFcn

autoDisableWhen

属性,该属性控制何时自动禁用菜单项。

  • “锁定”(默认)-当活动编辑器被锁定或当模型繁忙时

  • “忙”—仅当模型处于繁忙状态时

  • “永远”——永远

注册菜单自定义

必须向自定义管理器注册要包含在Simulink菜单中的自定义项。万博1manbetx使用sl_customization.m文件用于Simulin万博1manbetxk安装(请参见用Simulink注册自定义万博1manbetx)来执行这项任务。特别是,对于您想要自定义的每个菜单,您的系统sl_customization函数必须调用自定义管理器addCustomMenuFcn方法。每次调用都应该传递菜单的标记(参见菜单标签)和指定要添加到菜单中的项目的自定义菜单函数(请参阅创建自定义菜单功能).例如sl_customization函数将自定义项添加到Simulink工具菜单。万博1manbetx

注册自定义菜单函数。cm.addCustomMenuFcn ('万博1manbetx仿真软件:ToolsMenu',@getMyItems);

创建自定义菜单功能

自定义菜单函数返回模式函数的单元格数组,这些模式函数定义了您希望出现在模型编辑器菜单上的自定义项(请参阅定义菜单项).方法返回的单元格数组类似于generateFcn函数。

您的自定义菜单函数应该接受回调信息对象(参见回调信息对象)并返回一个列出模式函数的单元格数组。单元格数组的每个元素可以是模式函数的句柄,也可以是两个元素的单元格数组,其中第一个元素是模式函数的句柄,第二个元素是要传递给模式函数的用户定义数据。例如,下面的自定义菜单函数返回一个单元格数组,其中列出了三个模式函数。

函数schema = getMyItems(callbackInfo) schema = {@getItem1,…@getItem2,……{@getItem3 3}};将3作为用户数据传递给getItem3。结束

回调信息对象

这些对象的实例被传递给菜单自定义函数。这些对象的方法和属性包括:

方法或属性 描述
uiObject

方法获取该回调函数所针对的菜单的所有者的句柄。所有者可以是Simulink编辑器或状态流万博1manbetx编辑器。

模型

方法获取在编辑器窗口中显示的模型的句柄。

用户数据

用户数据属性。此属性的值可以是任何类型的数据。

调试自定义菜单回调

在使用微软的系统上®窗户®在操作系统中,选择回调包含断点的自定义菜单项可能导致鼠标失去响应或菜单保持打开状态并位于其他窗口之上。要修复这些问题,请使用MATLAB代码调试器键盘命令继续执行回调。

菜单标签

菜单标记标识一个Simulink Editor菜万博1manbetx单、一个Stateflow Editor菜单或一个上下文菜单。您需要知道菜单的标记,以便向其中添加自定义项(请参阅注册菜单自定义).

标签 它增加了什么
万博1manbetx动态仿真模块标签
万博1manbetx动态仿真模块:菜单条(待移除) 菜单到Simulink编万博1manbetx辑器菜单栏
万博1manbetx仿真软件:PreContextMenu 项到Simulink Editor上下文菜单的开头万博1manbetx
万博1manbetx仿真软件:快捷菜单 项到Simulink Editor上下文菜万博1manbetx单的末尾
万博1manbetx仿真软件:FileMenu(待移除) 项目到Simulink编辑器的末尾万博1manbetx文件菜单
万博1manbetx动态仿真模块:菜单程序(待移除) 项目到Simulink编辑器的末尾万博1manbetx编辑菜单
万博1manbetx仿真软件:ViewMenu(待移除) 项目到Simulink编辑器的末尾万博1manbetx视图菜单
万博1manbetx仿真软件:DisplayMenu(待移除) 项目到Simulink编辑器的末尾万博1manbetx显示菜单
万博1manbetx仿真软件:DiagramMenu(待移除) 项目到Simulink编辑器的末尾万博1manbetx菜单
万博1manbetx仿真软件:SimulationMenu(待移除) 项目到Simulink编辑器的末尾万博1manbetx模拟菜单
万博1manbetx仿真软件:AnalysisMenu(待移除) 项目到Simulink编辑器的末尾万博1manbetx分析菜单
万博1manbetx仿真软件:CodeMenu(待移除) 项目到Simulink编辑器的末尾万博1manbetx代码菜单
万博1manbetx仿真软件:ToolsMenu(待移除) 项目到Simulink编辑器的末尾万博1manbetx工具菜单
万博1manbetx仿真软件:HelpMenu(待移除) 项目到Simulink编辑器的末尾万博1manbetx帮助菜单
Stateflow标签
Stateflow:菜单条(待移除) 菜单中的“状态流编辑器”菜单栏
Stateflow: PreContextMenu 项添加到状态流编辑器上下文菜单的开头。
Stateflow:快捷菜单 状态流编辑器上下文菜单末尾的项。
Stateflow: FileMenu(待移除) 项到状态流编辑器的末尾文件菜单
Stateflow:菜单程序(待移除) 项到状态流编辑器的末尾编辑菜单
Stateflow: ViewMenu(待移除) 项到状态流编辑器的末尾视图菜单
Stateflow: DisplayMenu(待移除) 项到状态流编辑器的末尾显示菜单
Stateflow: ChartMenu(待移除) 项到状态流编辑器的末尾图表菜单
Stateflow: SimulationMenu(待移除) 项到状态流编辑器的末尾模拟菜单
Stateflow: AnalysisMenu(待移除) 项到状态流编辑器的末尾分析菜单
Stateflow: CodeMenu(待移除) 项到状态流编辑器的末尾代码菜单
Stateflow: ToolsMenu(待移除) 项到状态流编辑器的末尾工具菜单
Stateflow: HelpMenu(待移除) 项到状态流编辑器的末尾帮助菜单

万博1manbetx而且Stateflow编辑器菜单定制

使用与用于Simulink Editor相同的通用过程来自定义状态流编辑器菜单。万博1manbetx在顶级菜单的末尾添加自定义菜单函数取决于活动编辑器:

  • 绑定的菜单万博1manbetx仿真软件:FileMenu仅在Simulink编辑器处于活动状态时显万博1manbetx示。

  • 绑定的菜单Stateflow: FileMenu仅在状态流编辑器处于活动状态时出现。

  • 若要在两个编辑器中都显示菜单,请调用addCustomMenuFcn两次,每个标签一次。检查代码是否在两个编辑器中都可以工作。

相关的话题