使用“自定义用户界面”(CUI) 编辑器,可使用工作空间来控制下拉式菜单的交换。但是,也可以通过编程方法将某个下拉式菜单交换为另一个(例如,在用户加载需要其他菜单的应用程序的情况下)。
因为本程序具有级联下拉式菜单,所以几乎不需要交换菜单。另外,交换菜单会降低用户界面的一致性。不过,使用 $ 命令可以交换下拉式菜单和子菜单。另外一种菜单交换涉及相对(或全局)参照。用这种方法,可以在已知菜单前面插入新菜单,然后删除已知菜单。
为进行菜单交换,下拉式菜单区域被命名为 P1 到 P16。通过将菜单中的标题行替换为 $Pn= 命令,可以更改显示在菜单栏中的标题。可以在任意命令中使用特殊命令 $Pn=*,强制下拉当前指定给 POPn 区域的菜单,从而提高定点设备移动的灵活性。
以下宏样例将以自定义组 MYMENU 中名为 MyMenu 的菜单替换位于 P3 的菜单。
$P3=mymenu.new3
用 AutoLISP menucmd 函数同样可以完成该操作:
(menucmd "P3=mymenu.new3")
菜单交换通过从一个菜单中直接激活另一个菜单实现。以下界面元素支持菜单交换:
$section=customizationgroup.menuname
AutoLISP menucmd 函数可用于插入或删除下拉式菜单。其语法与用于交换下拉式菜单的语法类似,不同之处在于赋值左侧是下拉式菜单,新菜单将被插入到该菜单前面。赋值右侧是一个加号 (+),后面带有菜单组名、句点以及菜单的别名。如以下语法所示:
(menucmd "customizationgroup1.menuname1=+customizationgroup2.menuname2")
也可以用 Pn= 语法来插入菜单。以下宏将在 P5 菜单后面插入一个菜单。
(menucmd "P5=+mymenu.new3")
$P5=+mymenu.new3
如果用此方法插入菜单,请牢记不能保证该菜单如预期的那样被插入 P6 菜单位置。有两个原因可导致菜单不在预期的位置。
(menucmd "Gcustomizationgroup.menuname=-")
Gcustomizationgroup.menuname=-
下例演示了如何删除“MyMenu”菜单组的成员菜单 NEW3。
(menucmd "Gmymenu.new3=-")
$Gmymenu.new3=-"
正如您所认为的,上述格式比 Pn= 格式更好用,因为它将只删除指定的菜单。下例展示了如何删除 P4 位置处的菜单(不管其为何种菜单)。
(menucmd "P4=-")
$P4=-
要控制局部 CUIx 文件中的控制工具栏,请在 -TOOLBAR 命令的“输入工具栏名称或 [全部(ALL)]:”提示下使用以下语法。
menugroup.subsection-name
此语法可以访问由 menugroup.menuname 标识的工具栏,并使用户能够使用该工具栏上 -TOOLBAR 命令的所有选项。
如果其中某个命令和函数省略了菜单组,那么程序将默认为主 CUIx 文件。