二、了解菜单文件内幕
通过第一节的介绍我们会发现,AutoCAD提供的菜单定制功能十分简单,不能满足各种专业的需要,那么AutoCAD的强大定制功能是如何实现的呢?原来AutoCAD的菜单文件是使用ASCII码格式存储的文件,使用任何文本编辑器都可以编辑。只要懂得菜单文件的格式和语法,就可以定制执行各种命令的菜单。这种定制方法尽管比较繁琐难学,但却为AutoCAD的菜单开发提供了更广阔的空间,下面我们就能深入研究菜单文件内幕。
菜单文件用于定义和显示AutoCAD中的各种菜单。菜单文件实际上是功能与格式各不相同的一组文件:MNU文件是模板菜单文件,是ASCII码格式;MNS文件是菜单源文件,也是ASCII码格式;MNR文件是菜单资源文件,二进制格式,包含菜单所用的资源;MNC文件是经过编译的菜单文件,AutoCAD可以识别的二进制格式;MNL文件是菜单LISP文件,包含菜单文件所用AutoLISP表达式;MND文件则是包含宏定义的特定菜单源文件,不经常使用。在这些文件当中,我们真正关心的是可以编辑的ASCII码文件,特别是MNU文件。如果了解这些菜单文件的生成和调用过程,就可以理解我们只关心MNU文件的原因了,因为其它菜单文件都是MNU文件生成的。
![]() |
| 图3 |
菜单模板文件是一个供用户编辑的ASCII文件,在这种文件里包含有较多的注释和适当的分隔符,便于使用者阅读和编辑。AutoCAD载入MNU文件后,它会自动生成一个MNS文件,这个文件也是ASCII码格式,内容与同名MNU文件基本相同,只是去除了多余的注释和分隔部分。AutoCAD将MNS文件作为进一步编译的源文件,MNS文件经过编译之后会生成一个程序可以直接调用的二进制MNC文件以及与之对应的资源文件MNR。这两种文件都是二进制格式,不可以直接编辑,这5种文件之间的关系如图4所示。
![]() |
| 图4 |
如果用户编辑的菜单命令中包含了AutoLISP表达式,则AutoCAD会将这些表达式存为MNL文件。AutoCAD在调用菜单文件(MNU、MNS、MNC)时,将搜索同名的MNL文件,若找到,则此MNL文件将被同时调入内存。在对其它菜单文件进行更名操作时,一定要同时将相应的MNL文件更名。不然,会因为菜单命令内AutoLISP表达式无法求值而引起错误。菜单文件储存在AutoCAD安装路径的Support子目录下,AutoCAD的标准菜单的文件名是ACAD.MNU。为了学习菜单的定制和开发技术,深入研究一下ACAD.MNU文件是很要必要的。在Support子目录中找到ACAD.MNU文件,用文本编辑器打开它。





