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

點擊下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM