zoukankan      html  css  js  c++  java
  • AutoCAD.NET二次开发:创建自定义菜单(AcCui)

    从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, -1);
    PopMenuItem pmi1 = new PopMenuItem(mm1, "文件", pm1, -1);
    PopMenuItem pmi2 = new PopMenuItem(mm2, "模板", pm1, -1);
    
    //子项的菜单(单级)
    PopMenuItem pmi3 = new PopMenuItem(mm3, "保存(&S)", pmParent, -1);

    6、保存菜单文件

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

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

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

    点击下载

  • 相关阅读:
    一些qml资料
    qml 的又一个框架
    qml 最新资源
    sql 创建数据库
    sql2008 无法附加数据库
    C#==>匿名方法
    sql alter表字段处理
    哪些字符需要urlencode编码?具体怎么处理?
    vs2010设置编辑器背景颜色
    nbtstat -a <IP> 会显示主机名、所在工作组等信息
  • 原文地址:https://www.cnblogs.com/bomb12138/p/3600842.html
Copyright © 2011-2022 走看看