交换和插入下拉菜单 (概念)

AutoCAD 2008

 
交换和插入下拉菜单
概念 快速参考
 
 
 

使用“自定义用户界面”编辑器,可使用工作空间来控制下拉菜单的交换。但是,也可以有计划地交换下拉菜单(例如,在用户加载需要其他菜单的应用程序的情况下)。菜单交换将直接从一个菜单中激活另一个菜单。

交换下拉菜单

因为本程序具有级联下拉菜单,所以几乎不需要交换菜单。另外,交换菜单会降低用户界面的一致性。不过,使用 $ 命令可以交换下拉菜单和子菜单。另外一种菜单交换涉及相对(或全局)引用。用这种方法,可以在已知菜单前面插入新菜单,然后删除已知菜单。

为进行菜单交换,下拉菜单区域被命名为 P1P16。通过将菜单中的标题行替换为 $Pn= 命令,可以修改显示在菜单栏中的标题。可以在任意命令中使用特殊命令 $Pn=*,强制下拉当前指定给 POPn 区域的菜单,从而提高定点设备移动的灵活性。

以下宏样例将以自定义组 MYMENU 中名为 BudsMenu 的菜单替换位于 P3 的菜单。

$P3=MyMenu.BudsMenu

用 AutoLISP menucmd 函数同样可以完成该操作:

(menucmd "P3=MyMenu.BudsMenu")

可以在任意宏中使用 $Pn=* 特殊命令,以强制显示当前指定给区域 POPn 的菜单。

注意下拉菜单的交换不符合 Microsoft® 用户界面原则,并且不保证在程序的后续版本中可用。

插入和删除下拉菜单

菜单交换直接从一个菜单中激活另一个菜单。以下界面元素支持菜单交换:

  • 按钮
  • 下拉菜单
  • 鼠标按钮
  • 图像平铺菜单
  • 数字化仪菜单

交换局部菜单的语法如下所示:

$section=menugroup.menuname

section

B1-4、A1-4、P0-16、T1-4

menugroup

所需 CUI 文件中的自定义组名

menuname

主标签或主别名

AutoLISP menucmd 函数可用于插入或删除下拉菜单。其语法与用于交换下拉菜单的语法类似,不同之处在于赋值左侧是下拉菜单,新菜单将被插入到该菜单前面。赋值右侧是一个加号 (+),后面带有菜单组名、句点以及菜单的别名。如以下语法所示:

(menucmd "Gmenugroup1.menuname1=+menugroup2.menuname2")

也可以用 Pn= 语法来插入菜单。以下宏将在 P5 菜单后面插入一个菜单。(也可按此格式使用 menucmd 函数。)

(menucmd "P5=+mymenu.new3")

如果用此方法插入菜单,请牢记不能保证该菜单如预期的那样被插入 P6 菜单位置。有两个原因可导致菜单不在预期的位置。

  • 如果当前菜单栏只有三个菜单,那么在菜单 P5 后面插入一个菜单会导致新菜单位于 P4 位置。
  • 如果用户用 CUILOAD 命令或者在另一个应用程序插入或删除自定义文件时插入或删除自定义文件,那么菜单编号可以不遵循语法。

删除菜单的语法为:

(menucmd "Gmenugroup.menuname=-")

下例删除“MyMenu”菜单组的成员菜单 NEW3

(menucmd "Gmymenu.new3=-")

正如您所认为的,上述格式比 Pn= 格式更好用,因为它将只删除指定的菜单。以下样例删除 P4 位置上的菜单(而不管它是什么)。

$P4=-
注意仅使用 Pn 语法作为 menucmd 语句的部分语法。而将 $Pn 语法用于带有特定宏的语句。

通过局部 CUI 文件控制工具栏

要通过局部 CUI 文件来控制工具栏,请在 -TOOLBAR 命令的“输入工具栏名称或 [全部(A)]:”提示下使用以下语法。

        menugroup.subsection-name
      

此语法可以访问由 menugroup.menuname 标识的工具栏,并使用户能够使用该工具栏上 -TOOLBAR 命令的所有选项。

如果其中某个命令和函数省略了菜单组,那么程序将默认为主 CUI 文件。

应该了解以下问题:

  • 无法从外部自定义文件交换图像平铺菜单。
  • 只能交换相同类型的自定义元素;即,用一个快捷菜单交换另一个快捷菜单、用一个工具栏交换另一个工具栏,等等。试图交换不同类型的菜单会导致无法预料的后果。