明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1096|回复: 2

[界面] 求帮助:关于用代码创建局部CUI文件

[复制链接]
发表于 2015-4-30 13:29:11 | 显示全部楼层 |阅读模式
主界面就想做成这个样子



目前遇到的问题是:
       当CAD启动后,调用命令,上面的四个区域都可以创建成功
       但当我在void IExtensionApplication.Initialize() 中调用时,②面板能够创建成功,但是  ①Ribbon面板和③快捷菜单 无法创建,因为
       Autodesk.Windows.RibbonControl rc = Autodesk.Windows.ComponentManager.Ribbon;  这里rc为null值
       感觉最简单的方法,就是如果CAD主界面创建成功后,会触发一个事件,然后获取这个事件就好了。不知道有没有这种事件。
      如果用局部CUI的方式做界面,我找了几天的资料,网上到时有讲菜单写入CUIX的方法,就是没有找到怎么讲Ribbon面板写入CUIX文件,并且后续的快捷菜单,和工作空间也不知道怎么搞了。

        求帮助啊!

附上生成Ribbon的代码
  1. #region 添加功能区菜单
  2.         [CommandMethod("AddRibbon")]
  3.         public void AddRibbon()
  4.         {
  5.             Autodesk.Windows.RibbonControl rc = GetRibbonControl();
  6.             RibbonTab rt = GetRibbonTab("菜单标签", "1");
  7.             RibbonPanel rp = GetRibbonPanel("菜单面板");
  8.             Autodesk.Windows.RibbonButton rb = GetRibbonButton("菜单按钮", "菜单命令");

  9.             rp.Source.Items.Add(rb);
  10.             rt.Panels.Add(rp);
  11.             rc.Tabs.Add(rt);
  12.         }

  13.         /// <summary>
  14.         /// 获得菜单控制
  15.         /// </summary>
  16.         /// <returns></returns>
  17.         public static Autodesk.Windows.RibbonControl GetRibbonControl()
  18.         {
  19.             if (Autodesk.Windows.ComponentManager.Ribbon == null)
  20.                 Autodesk.Windows.ComponentManager.ItemInitialized += new EventHandler<RibbonItemEventArgs>(ComponentManager_ItemInitialized);
  21.             return Autodesk.Windows.ComponentManager.Ribbon; //Autodesk.AutoCAD.Ribbon.RibbonServices.RibbonPaletteSet.RibbonControl; //
  22.         }

  23.         /// <summary>
  24.         /// 创建菜单标签
  25.         /// </summary>
  26.         /// <param name="Name">标签名</param>
  27.         /// <param name="id">标签ID</param>
  28.         /// <returns></returns>
  29.         public static RibbonTab GetRibbonTab(string Name, string id)
  30.         {
  31.             RibbonTab ribTab = new Autodesk.Windows.RibbonTab();
  32.             ribTab.Title = Name;
  33.             ribTab.Id = id;
  34.             ribTab.IsActive = true;
  35.             return ribTab;
  36.         }

  37.         /// <summary>
  38.         /// 创建菜单面板
  39.         /// </summary>
  40.         /// <param name="Title">面板名</param>
  41.         /// <returns></returns>
  42.         public static RibbonPanel GetRibbonPanel(string Title)
  43.         {
  44.             Autodesk.Windows.RibbonPanelSource ribSourcePanel = new Autodesk.Windows.RibbonPanelSource(); // Autodesk.Windows
  45.             ribSourcePanel.Title = Title;//now the panel
  46.             RibbonPanel ribPanel = new RibbonPanel();
  47.             ribPanel.Source = ribSourcePanel;
  48.             return ribPanel;
  49.         }

  50.         /// <summary>
  51.         /// 创建菜单按钮
  52.         /// </summary>
  53.         /// <param name="btName">按钮名</param>
  54.         /// <param name="cmdName">命令名</param>
  55.         /// <returns></returns>
  56.         public static Autodesk.Windows.RibbonButton GetRibbonButton(string btName, string cmdName)
  57.         {
  58.             Autodesk.Windows.RibbonButton ribButton = new Autodesk.Windows.RibbonButton();
  59.             
  60.             ribButton.Text = btName;//按钮名称
  61.             ribButton.CommandParameter = "HelloWorld";//修改的这里//cmdName;执行的命令名称
  62.             ribButton.ShowText = true;
  63.             ribButton.CommandHandler = new AdskCommandHandler();
  64.             return ribButton;
  65.         }

  66.         /// <summary>
  67.         /// 用于激活菜单
  68.         /// </summary>
  69.         /// <param name="sender"></param>
  70.         /// <param name="e"></param>
  71.         static void ComponentManager_ItemInitialized(object sender, RibbonItemEventArgs e)
  72.         {
  73.             if (Autodesk.Windows.ComponentManager.Ribbon != null)
  74.                 Autodesk.Windows.ComponentManager.ItemInitialized -= new EventHandler<RibbonItemEventArgs>(ComponentManager_ItemInitialized);
  75.         }





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2015-4-30 15:46:24 来自手机 | 显示全部楼层
建议直接做成cui文件加载
 楼主| 发表于 2015-5-4 10:48:36 | 显示全部楼层
飞狐版主有关于局部Cui的代码吗,我在网上找了几天了,只找到了关于 MenuGroup的代码,而快捷菜单等的代码都没有
我通过另外一种方式解决了这个问题,共享一下

  1. void IExtensionApplication.Initialize()
  2. {   
  3.        Autodesk.Windows.ComponentManager.ItemInitialized += c1.Initialed;//在这里注册一个事件
  4. }
复制代码
在这里事件响应这么写
  1. public  void Initialed(object sender,RibbonItemEventArgs args)
  2.         {

  3.             if (Autodesk.Windows.ComponentManager.Ribbon != null)
  4.             {
  5.                 AddRibbon();
  6.                 AddPalette();
  7.                 Autodesk.Windows.ComponentManager.ItemInitialized -= Initialed;
  8.             }
  9.         }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 11:43 , Processed in 0.170657 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表