从CAD2007之后,Autodesk提供了一个新的程序集AcCui.dll,使用这个程序集,我们可以方便地做一些界面方面的操作,比如创建自定义菜单。

下面介绍一下菜单的创建过程:

1、在项目中添加引用:AcCui.dll,这个DLL存放在CAD的安装目录中。但是,好像CAD2007之前的版本里没有这个DLL),我电脑上安装了CAD2004、CAD2005、CAD2008、CAD2010,其中,只有CAD2008和CAD2010中有这个DLL。

2、在代码中添加using:

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Customization;
using System.Collections.Specialized;

3、声明一个自定义组,在这个组中可以自定义我们的命令、菜单、工具栏等。

//自定义的组名
string strMyGroupName = "MyGroup";
//保存的CUI文件名(从CAD2010开始,后缀改为了cuix)
string strCuiFileName = "MyMenu.cui"; //创建一个自定义组(这个组中将包含我们自定义的命令、菜单、工具栏、面板等)
CustomizationSection myCSection = new CustomizationSection();
myCSection.MenuGroupName = strMyGroupName;

4、创建命令组,并添加菜单命令

//创建自定义命令组
MacroGroup mg = new MacroGroup("MyMethod", myCSection.MenuGroup);
MenuMacro mm1 = new MenuMacro(mg, "打开文件", "OF", "");
MenuMacro mm2 = new MenuMacro(mg, "打开模板", "OM", "");
MenuMacro mm3 = new MenuMacro(mg, "保存", "SV", "");

5、创建菜单,如果菜单项是单级菜单,则直接声明为PopMenuItem即可;如果菜单项下有子级,则将其子级放到一个PopMenu中,然后将这个PopMenu放到PopMenuRef中,最后将PopMenuRef放到总菜单中。按照这个原理,可以创建多级菜单。

 //声明菜单别名
StringCollection scMyMenuAlias = new StringCollection();
scMyMenuAlias.Add("MyPop1");
scMyMenuAlias.Add("MyTestPop"); //菜单项(将显示在项部菜单栏中)
PopMenu pmParent = new PopMenu("我的菜单", scMyMenuAlias, "我的菜单", myCSection.MenuGroup); //子项的菜单(多级)
PopMenu pm1 = new PopMenu("打开", new StringCollection(), "", myCSection.MenuGroup);
PopMenuRef pmr1 = new PopMenuRef(pm1, pmParent, -);
PopMenuItem pmi1 = new PopMenuItem(mm1, "文件", pm1, -);
PopMenuItem pmi2 = new PopMenuItem(mm2, "模板", pm1, -); //子项的菜单(单级)
PopMenuItem pmi3 = new PopMenuItem(mm3, "保存(&S)", pmParent, -);

6、保存菜单文件

// 最后保存文件
myCSection.SaveAs(strCuiFileName);

本来还想实现菜单的自动加载,但是CUI菜单必须用cuiload命令进行加载,在网上找到的方法都是向CAD发送lisp命令调用cuiload,但是我没有调用成功过。

下面是一个测试程序的源码,开发环境是:VS2005 + CAD2008

点击下载

AutoCAD.NET二次开发:创建自定义菜单(AcCui)的更多相关文章

  1. 微信公众号开发——创建自定义菜单(PHP版)

    <?php include "TokenUtil.php"; //TokenUtil::build_access_token(); $access_token = Token ...

  2. .NET微信公众号开发-2.0创建自定义菜单

    一.前言 开发之前,我们需要阅读官方的接口说明文档,不得不吐槽一下,微信的这个官方文档真的很烂,但是,为了开发我们需要的功能,我们也不得不去看这些文档. 接口文档地址:http://mp.weixin ...

  3. .NET开发微信公众号之创建自定义菜单

    一.简介 微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能.开发者可利用该功能为公众账号的会话界面底部增加自定义菜单,用户点击菜单中的选项,可以调出相应的回复信息或网页链接.自 ...

  4. 利用C#进行AUTOCAD的二次开发

    众所周知,对AutoCAD进行二次开发用到的主要工具有:ObjectArx,VBA,VLisp.但它们的优缺点是显而易见的:ObjectArx功能强大,编程效率高,但它的缺点是编程者必须掌握VC++, ...

  5. 2、Arx二次开发创建第一个应用程序

    一.本节课程 Arx二次开发创建第一个应用程序 二.本节要讲解的知识点 1.手动创建ARX的应用的步骤. 2.应用向导创建ARX应用程序的步骤. 三.具体内容 1.需求:创建一个Hello World ...

  6. PHPCMS V9二次开发便捷自定义后台入口文件夹

    phpcms v9二次开发便捷自定义后台入口文件夹 最新发布的phpcms v9由于采用了mvc的设计模式,所以它的后台访问地址是固定的,虽然可以通过修改路由配置文件来实现修改,但每次都修改路由配置文 ...

  7. 微信公众平台创建自定义菜单的PHP代码

    授人以鱼不如授人以渔.在方倍工作室上问了一下,创建自定义菜单的代码多少钱,一张口就一百,好吧,那我就给你们一人省一百块钱吧,你们说该如何谢谢我?事先说明一下啊,你的PHP版本要高于4.0.2才支持cU ...

  8. 4、c++ Arx二次开发创建多段线

    一.本节课程 c++ Arx二次开发创建多段线 二.本节要讲解的知识点 如何应用C++ ARX二次开发创建多段线(AcDbPolyline.AcDb2dPolyLine.AcDb3dPolyline的 ...

  9. 微信利用PHP创建自定义菜单的方法

    在使用通用接口前,你需要做以下两步工作:1.拥有一个微信公众账号,并获取到appid和appsecret(在公众平台申请内测资格,审核通过后可获得)2.通过获取凭证接口获取到access_token注 ...

随机推荐

  1. iOS开发:mac使用svn管理项目

    记录mac下常用的svn命令: 1.检出项目: svn checkout .../svn/projectName --username=xxx --password=xxx //将ip换成svn服务器 ...

  2. Instruments-查看收集到的数据

    由于Xcode调试工具Instruments指南篇幅太长,所以本篇blog继续上篇,介绍对Instruments收集到的数据去分析. 关于数据分析 Instruments不解决你代码中的任何问题,它帮 ...

  3. UVa 1467 (贪心+暴力) Installations

    题意: 一共有n项服务,每项服务有安装的时间s和截止时间d.对于每项任务,如果有一项超出截止时间,惩罚值为所超出时间的长度.问如何安装才能使惩罚值最大的两个任务的惩罚值之和最小. 分析: 如果是求总惩 ...

  4. Android开发时提示Your project contains error(s),please fix them be

    有次在使用eclipse写好Android的代码,代码没有报错.然后 想在AVD中运行测试时,总是会弹出错误框,提示信息为:    “Your project contains error(s),pl ...

  5. [反汇编练习] 160个CrackMe之020

    [反汇编练习] 160个CrackMe之020. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  6. 纯css做的安卓开机动画

    随着css3的发展,越来越多的负责绚丽的效果可以由纯css来完成了.用css3实现的动画效果丝毫不必js实现的逊色,而且浏览器对css渲染的速度远比js快,大多数时候css的体积也不js小.其中css ...

  7. 在android中进行视频的分割

    最近项目有个需求要对录制的视频进行分割,查了很多资料,看到ffmpeg可以对视频进行分割.上网找到别人基于android的开源ffmpeg,终于编译成功ffmpeg.so.但是要使用的话还要查ffmp ...

  8. MySQL基础之第6章 创建、修改和删除表 .

    6.1.创建表 6.1.1.创建表的语法形式 CREATE TABLE 表名 ( 属性名 数据类型 [完整性约束条件],属性名 数据类型 [完整性约束条件],...... 属性名 数据类型); 完整性 ...

  9. Java 如何防止线程意外中止

    Thread的run方法是不抛出任何检查型异常(checked exception)的,但是它自身却可能因为一个异常而被终止,导致这个线程的终结.最麻烦的是,在线程中抛出的异常即使使用try...ca ...

  10. 一个好用的hibernate泛型dao

    以前从springside2.0上搞下来的很好用的,基本实现dao零编码只要配置xml文件就行了. 先看图: 一共4层,com.demonstration.hibernate.basedao是我加的用 ...