AutoCAD菜单的开发技术(2)

来源:岁月联盟 编辑:zhuzhu 时间:2006-11-06
AutoCAD菜单的开发技术(2)内容简介:除了Windows标准菜单外,AutoCAD还提供了其它形式的快捷方式来执行命令,例如工具栏、图像菜单、屏幕菜单、快捷键等。菜单文件的其它区域定义了这些快捷方式。“***TOOLBARS”部分指定工具栏的缺省布局和内容,它包含菜单

除了Windows标准菜单外,AutoCAD还提供了其它形式的快捷方式来执行命令,例如工具栏、图像菜单、屏幕菜单、快捷键等。菜单文件的其它区域定义了这些快捷方式。“***TOOLBARS”部分指定工具栏的缺省布局和内容,它包含菜单所定义工具栏的子菜单,如图6所示。

图像控件菜单主要用来当用户选择一个图形符号时提供图像,图像控件菜单通过在菜单文件中提供“***IMAGE”部分来定义。

“***SCREEN”部分标签表示AutoCAD屏幕菜单的开始。屏幕菜单部分控制屏幕菜单区域。缺省情况下,屏幕菜单是禁用的。通过选择“工具/选项/显示”上的“显示屏幕菜单”,可启用屏幕菜单。

菜单文件中标签为“***TABLET1”到“***TABLET4”的四个部分定义了一些菜单宏,这些菜单宏与指定区域的数字化仪选择相关。AutoCAD最多可将数字化仪的四个区域配置为命令输入的菜单区域。

状态行帮助信息是帮助支持的一个重要方面,当菜单项被选择时,在状态行中显示这些简单的描述性信息。“***HELPSTRINGS”部分中的帮助字符串菜单区域支持这种格式的帮助,如图7所示。

图7

AutoCAD支持用户定义的快捷键。“***ACCELERATORS”菜单区域定义了来自用户的快捷键。

三、建立自己的菜单

当AutoCAD提供的标准菜单不能满足用户需求时,我们可以通过修改菜单文件来开发自己的菜单。我们可以用修改ACAD.MNU文件的方法建立自己的菜单项。下面我们来制作一个最简单的菜单。

第一步:打开ACAD.MNU文件,在文件中输入如下字样:

 ***POP12
   [绘制]
   [直线] ^c^c^_line
   [圆] ^c^c_circle
   [文字] ^c^c_text

第二步:存盘并退出文本编辑器,然后进行AutoCAD绘图环境。

第三步:在AutoCAD的命令行中键入“MENU”命令,将出现“选择菜单文件”对话框。在“文件类型”下拉列表框中选择“菜单样板”文件类型,选中ACAD.MNU文件,单击“打开”按钮载入该文件。此时,程序弹出提示框,由于我们并没有对工具栏进行修改,所以单击“是”按钮继续载入ACAD.MNU文件。

这样,我们就建立了一个简单的菜单项(如图8所示),尽管很简单,但是基本说明定制菜单的方法,现在您可以试一试每个菜单的功能了!

图8

让我们回过头来看一下刚才添加的代码。“***POP12”这一行是菜单区域的区域名。ACAD菜单组中已经有11个菜单,所以我们将新建的菜单编号为12。为菜单区域编号不需要连续,只要不与前面的菜单区域重复就可以了。从[绘制]这一行开始的每一行都表示一个菜单项。每一个菜单项是菜单里的菜单标题,方括号内的内容称为菜单项标签,简称标签。在菜单项中的标签会显示在菜单栏中。接下来的三行都是菜单的菜单项。三行的结构相同,方括号内是菜单项的标题,方括号后的部分叫做菜单宏(Menu Macro),这部分是菜单命令的执行部分。

您可能发现了,菜单宏中的命令与在命令行中输入的命令行基本相同(如绘制直线命令line、画圆命令circle等),只是前面加了一些控制字符。其中“^”表示Ctrl键按下的状态,^C相当于按一次+组合键,即中断当前命令。连续两个“^C”可以保证菜单的命令一定能被执行。下划线“_”用于将其后的字符转换成AutoCAD命令和关键字。

菜单宏是与菜单项对应的命令序列,可以对菜单宏进行编程来实现复杂的功能。许多特殊字符也可以应用在菜单宏中实现一些功能,下表列出了可用于菜单宏的特殊字符。
=====================================================================
   字符 说明
=====================================================================
; 产生ENTER
^M 产生ENTER
^I 产生TAB
SPACEBAR 输入空格;菜单项中命令序列之间的空格等价于按SPACEBAR
/ 暂停以等候用户输入(不能用在快捷键部分)
- 转换AutoCAD命令及其后的关键字
+ 延续菜单宏到下一行(如果是最后一个字符)
=* 显示当前顶层的图像、下拉菜单或快捷菜单
*^C^C 重复项的前缀
$ 加载菜单部分或输入条件DIESEL宏表达式($M=)的特殊字符
^B ^B切换捕捉开或关(CTRL+B)
^C 取消命令(ESC)
^D 切换坐标显示开或关(CTRL+D)
^E 设置下一个等轴测平面(CTRL+E)
^G 切换栅格开或关(CTRL+G)
^H 产生退格
^O 切换正交模式开或关(CTRL+O)
^P 切换MENUECHO开或关
^Q 显示所有提示、状态列表和打印输入(CTRL+Q)
================================================================

利用AutoCAD提供的特殊字符可以制作各种特殊效果的菜单。我们将前面介绍的POP12菜单区域稍作修改,制作一些特殊的菜单,如分隔线、子菜单、被禁用的菜单等。修改后的菜单代码如下:

 ***POP12
   [绘制]
   [直线(&L)/tCtrl+L] ^c^c^_line
   [->圆] ^c^c_circle
   [R50圆] ^c^c_circle /50
   [<-R80圆] ^c^c_circle /80
   [--]
   [~文字] ^c^c_text

使用Menu命令重新载入ACAD.MNU菜单样板文件,可以发现我们自制的“绘制”菜单增加了快捷键、子菜单、分隔线和禁用菜单,如图9所示。

图9

在上面的代码中,“直线”菜单项增加了带下划线的菜单热键(L),还增加了快捷键CTRL+L。它的标签由[直线]变成了[直线(&L)/tCtrl+L]。其中“&”的作用是给“&”后的第一个字符加上下划线,并将其作为该菜单项的菜单热键;“/t”的作用是将其后的所有文字推向右边,即靠右对齐。菜单项“圆”的下面增加了两个子菜单。子菜单由一对特殊符号进行定义,符号“->”用在父菜单项标签的开头,表示这个菜单项含有子菜单;符号“<-”用在最后一个子菜单项标签的开头,表示这个菜单项是整个子菜单的最后一项。值得注意的是:这两个符号必须成对出现。AutoCAD会自动忽略不能与其它符号匹配的符号,这样“圆”菜单项也已经失去了原有的画圆功能。这是因为如果一个菜单项含子菜单,AutoCAD会自动忽略含该菜单项的菜单宏,这与Windows中的层叠菜单是相同的。菜单项“圆”的下面多了一条分隔线,这条分隔线是由两个连字符“[-]”产生的,分隔线不能被选中,其后的任何菜单宏都会被忽略。在一个菜单项的标签开始处加一个波浪线“~”就可以禁用该菜单项。“文字”菜单项就进行了这样的处理。被禁用的菜单项会变为灰色,不能被选中。当然,创建一个总是被禁用的菜单项是没有任何意义的,禁用符号通过都和AutoLISP语言的条件判断表达式组合使用,达到在特定状态下禁用特定菜单项的目的。例如在文本编辑器中,如果没有进行复制或剪切操作,那么粘帖菜单项就处于被禁用状态。

这个例子很简单,但是包括了最常用的几个标签控制字符的用法。AutoCAD提供的标签控制字符还有很多,下表显示了其它的标签控制符。
==============================================================
字符   说明
==============================================================
-- 下拉菜单或快捷菜单中的菜单项分隔符(使用时,不能包括其它任何字符)
+ 延续宏到下一行(如果是最后一个字符)
-> 指出下拉菜单或快捷菜单具有子菜单
<- 指出子菜单中的最后一个下拉菜单项或快捷菜单项
<-<-... 指出子菜单中的最后一个下拉菜单项或快捷菜单项并且结束父菜单。(每个<-结束一级
父菜单)
$( 如果作为第一个字符,则使下拉菜单或快捷菜单项标签求DIESEL字符串宏的值
~ 禁用菜单项的前缀符
!. 给菜单项打上复选标记的前缀符
& 直接放在下拉菜单或快捷菜单标签中一个字符之前,把该字符指定义菜单的热键。例如, S&le则将字每a下显示一条下划线
/ 指定下拉菜单或快捷菜单标签的菜单热键,通常与&符号配合使用
/t 把标签中这两个字符右边的文件置于菜单的右侧

图片内容