objectarx.net 自定义菜单 cui方式

本文目前仅包括怎样用objectarx.net 创建CUI,你可以用cad中的cui命令进行创建,不过我不喜欢那种方式,会附带很多无用的信息。

1个自定义局部cui包括如下内容:

head:这个基本不变

MenuGroup:这个是主要的菜单资源,包括了菜单所用到的命令以及菜单项的组成和工具栏等。

其中菜单组命令为MacroGroup ,里面包括了每个菜单用到的命令,每个命令由名称、命令、图标文件、注释等组成。

PopMenu表示菜单项的组成,里面包括了菜单的名称,挂接到命令ID,是否是分割条等。

ToolBar 表示工具栏的设置。

 

步骤:

1. 07以上版本,添加引用Accui.dll

2. 添加引用 using Autodesk.AutoCAD.Customization;

3. 得到主配置对象

    string mainCui = Application.GetSystemVariable("MENUNAME") + ".cui";// 从AUTOCAD系统变量MENUNAME得到main cui文件
            CustomizationSection cw = new CustomizationSection(mainCui);

4. 创建局部自定义cui对象

  CustomizationSection pcs = new CustomizationSection();
            pcs.MenuGroupName = strMenuGroupName;

5. 添加菜单的命令组
            MacroGroup mg = new MacroGroup(dtMacroGroup.TableName, pcs.MenuGroup);
            MenuMacro mm = null;
            foreach (System.Data.DataRow r in dtMacroGroup.Rows)
            {
                mm = new MenuMacro(mg, r["name"].ToString(), r["command"].ToString(), r["UID"].ToString(), MacroType.Any);
                mm.macro.HelpString = r["HelpString"].ToString();
                mg.AddMacro(mm);
            }

6. 添加菜单项的设置
            StringCollection sc = new StringCollection();
            sc.Add("POP1");
            PopMenu pm = new PopMenu(dtPopMenu.TableName, sc, dtPopMenu.Namespace, pcs.MenuGroup);
            PopMenuItem pmi = null;

            foreach (DataRow r in dtPopMenu.Rows)
            {             
                // 添加下拉菜单
                if (Convert.ToBoolean( r["IsSeparator"]))
                {
                    pmi = new PopMenuItem(pm);     //用此构造方法,即为分割条            
                    pm.PopMenuItems.Add(pmi);
                }
                else
                {
                    foreach (MenuMacro m in mg.MenuMacros)
                    {
                        if (m.ElementID == r["MenuMacroID"].ToString())
                        {
                            pmi = new PopMenuItem(m, r["NameRef"].ToString(), pm, -1);
                            pm.PopMenuItems.Add(pmi);
                            break;
                        }

                    }
                }
            }
7.  最后保存文件
            pcs.SaveAs(strCuiFile);

其中两个datatable的设置如下:

   System.Data.DataTable dtMacroGroup = new System.Data.DataTable("TestMacros");
                dtMacroGroup.Columns.Add("name", typeof(string));
                dtMacroGroup.Columns.Add("command", typeof(string));
                dtMacroGroup.Columns.Add("UID", typeof(string));
                dtMacroGroup.Columns.Add("HelpString", typeof(string));
                dtMacroGroup.Rows.Add("登录", "^C^CXLogon  ", "ID_XLogon", "登录到统一平台");
                dtMacroGroup.Rows.Add("检查", "^C^CXCheck  ", "ID_XCheck", "检查文件");

                System.Data.DataTable dtPopMenu = new System.Data.DataTable("CPE统一制图平台(&X)", "ID_CPEogprcd");
                dtPopMenu.Columns.Add("IsSeparator", typeof(bool));
                dtPopMenu.Columns.Add("NameRef", typeof(string));
                dtPopMenu.Columns.Add("MenuMacroID", typeof(string));

                dtPopMenu.Rows.Add(false, "登录(&L)", "ID_XLogon");
                dtPopMenu.Rows.Add(false, "检查(&C)", "ID_XCheck");
                dtPopMenu.Rows.Add(true, "", "");

详细代码如下:

 public static void BuildMenuCUI(string strMenuGroupName, string strCuiFile, System.Data.DataTable dtMacroGroup, System.Data.DataTable dtPopMenu)
        {
            try
            {

            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            string mainCui = Application.GetSystemVariable("MENUNAME") + ".cui";// 从AUTOCAD系统变量MENUNAME得到main cui文件
            CustomizationSection cw = new CustomizationSection(mainCui);      
            // 为我们的局部菜单创建一个自定义区域(customization section)
            CustomizationSection pcs = new CustomizationSection();
            pcs.MenuGroupName = strMenuGroupName;

            // 添加菜单的命令组
            MacroGroup mg = new MacroGroup(dtMacroGroup.TableName, pcs.MenuGroup);
            MenuMacro mm = null;
            foreach (System.Data.DataRow r in dtMacroGroup.Rows)
            {
                mm = new MenuMacro(mg, r["name"].ToString(), r["command"].ToString(), r["UID"].ToString(), MacroType.Any);
                mm.macro.HelpString = r["HelpString"].ToString();
                mg.AddMacro(mm);
            }
            //添加菜单项的设置
            StringCollection sc = new StringCollection();
            sc.Add("POP1");
            PopMenu pm = new PopMenu(dtPopMenu.TableName, sc, dtPopMenu.Namespace, pcs.MenuGroup);
            PopMenuItem pmi = null;

            foreach (DataRow r in dtPopMenu.Rows)
            {             
                // 添加下拉菜单
                if (Convert.ToBoolean( r["IsSeparator"]))
                {
                    pmi = new PopMenuItem(pm);     //用此构造方法,即为分割条            
                    pm.PopMenuItems.Add(pmi);
                }
                else
                {
                    foreach (MenuMacro m in mg.MenuMacros)
                    {
                        if (m.ElementID == r["MenuMacroID"].ToString())
                        {
                            pmi = new PopMenuItem(m, r["NameRef"].ToString(), pm, -1);
                            pm.PopMenuItems.Add(pmi);
                            break;
                        }

                    }
                }
            }
            // 最后保存文件
            pcs.SaveAs(strCuiFile);
              }
            catch (System.Exception ex)
            {
                throw new System.Exception("->BuildMenuCUI:" + ex.Message);
            }
        }   

效果如下:

生成的cui文件内容如下:(拷贝保存为txt,另存为 utf-8格式)

<?xml version="1.0"?>
<!--
警告!请勿编辑此文件的内容。
如果试图使用 XML 编辑器来编辑此文件,可能会失去自定义和移植功能。
如果需要修改自定义文件中的信息,请使用产品中的“自定义用户界面”对话框。
要访问“自定义用户界面”对话框,请单击“工具”菜单 >“自定义”>“界面”,或者在命令行中输入 CUI。
-->
<CustSection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <FileVersion MajorVersion="0" MinorVersion="4" IncrementalVersion="1" UserVersion="1" />
  <Header>
    <CommonConfiguration>
      <CommonItems>
        <ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
      </CommonItems>
    </CommonConfiguration>
    <WorkspaceRoot>
      <WorkspaceConfigRoot />
    </WorkspaceRoot>
  </Header>
  <MenuGroup Name="TEST">
    <MacroGroup Name="TestMacros">
      <MenuMacro UID="ID_XLogon">
        <Macro type="Any">
          <Revision MajorVersion="16" MinorVersion="2" UserVersion="1" />
          <ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
          <Name xlate="true" UID="XLS_0001">登录</Name>
          <Command>^C^CXLogon  </Command>
          <HelpString xlate="true" UID="XLS_0002">登录到统一平台</HelpString>
        </Macro>
      </MenuMacro>
      <MenuMacro UID="ID_XCheck">
        <Macro type="Any">
          <Revision MajorVersion="16" MinorVersion="2" UserVersion="1" />
          <ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
          <Name xlate="true" UID="XLS_0003">检查</Name>
          <Command>^C^CXCheck  </Command>
          <HelpString xlate="true" UID="XLS_0004">检查文件</HelpString>
        </Macro>
      </MenuMacro>
    </MacroGroup>
    <MenuRoot>
      <AcceleratorRoot />
      <OverrideRoot />
      <MouseButtonRoot />
      <DigitizerButtonRoot />
      <PopMenuRoot>
        <PopMenu hasDiesel="false" UID="ID_CPEogprcd">
          <ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
          <Alias>POP1</Alias>
          <Name xlate="true" UID="XLS_0005">CPE统一制图平台(&amp;X)</Name>
          <PopMenuItem IsSeparator="false" hasDiesel="false" UID="PMIU_0001">
            <ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
            <NameRef UID="XLS_0006" xlate="true">登录(&amp;L)</NameRef>
            <MenuItem>
              <MacroRef MenuMacroID="ID_XLogon" />
            </MenuItem>
          </PopMenuItem>
          <PopMenuItem IsSeparator="false" hasDiesel="false" UID="PMIU_0002">
            <ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
            <NameRef UID="XLS_0007" xlate="true">检查(&amp;C)</NameRef>
            <MenuItem>
              <MacroRef MenuMacroID="ID_XCheck" />
            </MenuItem>
          </PopMenuItem>
          <PopMenuItem IsSeparator="true" hasDiesel="false" UID="PMIU_0003">
            <ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
          </PopMenuItem>
        </PopMenu>
      </PopMenuRoot>
      <ToolbarRoot />
      <ScreenMenuRoot />
      <ImageMenuRoot />
      <TabletMenuRoot />
      <DoubleClickRoot />
      <ToolPanelRoot />
      <PanelSetRoot />
    </MenuRoot>
  </MenuGroup>
</CustSection>

你可能感兴趣的:(String,command,header,null,工具,平台)