从 AutoCAD 2010 版开始,引入了 Ribbon 界面。
那怎样用代码创建 Ribbon 界面呢?
本篇文章讲解如何创建如下图所示的 Ribbon Tab 页:测试Ribbon页。

如上图所示:
AutoCAD 的 Ribbon 界面由一系列 Tab 组成:默认、插入、注释……
测试Ribbon页 是我们创建的 Tab 页。
它由两个 Panel 组成:Panel1、Panel2。
Panel 下面就是三个按钮:直线、圆、Test。

除了需要添加 AutoCAD 引用: acmgd、acdbmgd、accoremgd(AutoCAD 2012版本及后续版本)。
还需要添加如下 AutoCAD 引用:
* AcWindows
* AdWindows

using System;
using System.Collections.Generic;
using System.Text;using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;using Autodesk.AutoCAD.Ribbon;
using Autodesk.Windows;//-----------------------------------------------
private static RibbonTab myRibbonTab = null;[CommandMethod("MyRibbonTab")]
public static void MyRibbonTab()
{// 创建Ribbon Tab页if (myRibbonTab == null){myRibbonTab = new RibbonTab();myRibbonTab.Title = "测试Ribbon页";myRibbonTab.Id = "MyRibbonTab";//RibbonPanel panel1 = new RibbonPanel();RibbonPanelSource panel1Src = new RibbonPanelSource();panel1Src.Title = "Panel 1";panel1.Source = panel1Src;myRibbonTab.Panels.Add(panel1);RibbonButton rbnBtnLine = NewRibbonBtn("直线");panel1Src.Items.Add(rbnBtnLine);RibbonButton rbnBtnCircle = NewRibbonBtn("圆");panel1Src.Items.Add(rbnBtnCircle);//RibbonPanel panel2 = new RibbonPanel();RibbonPanelSource panel2Src = new RibbonPanelSource();panel2Src.Title = "Panel 2";panel2.Source = panel2Src;myRibbonTab.Panels.Add(panel2);RibbonButton rbnBtnTest = NewRibbonBtn("Test");panel2Src.Items.Add(rbnBtnTest);}// 在AutoCAD的Ribbon窗口中显示RibbonControl ribCntrl = RibbonServices.RibbonPaletteSet.RibbonControl;ribCntrl.Tabs.Add(myRibbonTab);
}private static RibbonButton NewRibbonBtn(string text)
{RibbonButton button = new RibbonButton();button.Text = text;button.ShowText = true;return button;
}

以 AutoCAD 2014 版本为例,以上代码编译时会报错,添加如下引用即可解决。
* WindowsBase
* PresentationCore
* PresentationFramework
* System.Xaml


以上部分,只是实现了 Ribbon 界面,但 Ribbon 按钮还没实现触发执行命令。
首先,我们实现一自定义类 AdskCommandHandler,通过该类关联 Ribbon 按钮和对应的命令。

using Autodesk.AutoCAD.ApplicationServices.Core;
using Autodesk.Windows;
using System;
using System.Threading;
using System.Windows.Input;//namespace HelloAcad2014
//{public class AdskCommonHandler : ICommand{public event EventHandler CanExecuteChanged;public bool CanExecute(object parameter){return true;}public void Execute(object parameter){RibbonButton button = parameter as RibbonButton;if (button != null){Application.DocumentManager.MdiActiveDocument.SendStringToExecute((string)button.CommandParameter, true, false, true);}}}
//}

然后,更改 MyRibbonTab 代码如下:

using System;
using System.Collections.Generic;
using System.Text;using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;using Autodesk.AutoCAD.Ribbon;
using Autodesk.Windows;//-----------------------------------------------
private static RibbonTab myRibbonTab = null;[CommandMethod("MyRibbonTab")]
public static void MyRibbonTab()
{// 创建Ribbon Tab页if (myRibbonTab == null){myRibbonTab = new RibbonTab();myRibbonTab.Title = "测试Ribbon页";myRibbonTab.Id = "MyRibbonTab";//RibbonPanel panel1 = new RibbonPanel();RibbonPanelSource panel1Src = new RibbonPanelSource();panel1Src.Title = "Panel 1";panel1.Source = panel1Src;myRibbonTab.Panels.Add(panel1);RibbonButton rbnBtnLine = NewRibbonBtn("直线", "line ");panel1Src.Items.Add(rbnBtnLine);RibbonButton rbnBtnCircle = NewRibbonBtn("圆", "circle ");panel1Src.Items.Add(rbnBtnCircle);//RibbonPanel panel2 = new RibbonPanel();RibbonPanelSource panel2Src = new RibbonPanelSource();panel2Src.Title = "Panel 2";panel2.Source = panel2Src;myRibbonTab.Panels.Add(panel2);RibbonButton rbnBtnTest = NewRibbonBtn("Test", "MyCmdTest ");panel2Src.Items.Add(rbnBtnTest);}// 在AutoCAD的Ribbon窗口中显示RibbonControl ribCntrl = RibbonServices.RibbonPaletteSet.RibbonControl;bool isShow = false;foreach (RibbonTab rbnTab in ribCntrl.Tabs){if (rbnTab == myRibbonTab){isShow = true;break;}}if (!isShow){ribCntrl.Tabs.Add(myRibbonTab);}
}[CommandMethod("MyCmdTest")]
public static void MyCmdTest()
{Document doc = Application.DocumentManager.MdiActiveDocument;doc.Editor.WriteMessage("www.caxdev.com\n");
}private static RibbonButton NewRibbonBtn(string text, string cmd)
{RibbonButton button = new RibbonButton();button.Text = text;button.ShowText = true;button.CommandHandler = new AdskCommonHandler();button.CommandParameter = cmd;return button;
}

注意:
RibbonButton 的 CommandParameter 一定要在命令字符串最后加空格。

参考文章:
AutoCAD中程序创建Ribbon界面执行AutoCAD命令

AutoCAD .Net 创建Ribbon界面(一)相关推荐

  1. AutoCAD中程序创建Ribbon界面执行AutoCAD命令

    在基于AutoCAD做二次开发时,常见的教程讲的都是在DLL中定义一些自定义命令,然后通过netload命令加载这个DLL,通过执行自定义命令的方式来执行我们的自定义功能.这样的方式在在学习中是显得很 ...

  2. 创建Ribbon界面

    Visual C++ 2010创建Ribbon界面(上) 2009-08-19 14:22:57|  分类: VC++程序设计 [IT168 专稿]随着Office 2007的发布,它改变了以往传统的 ...

  3. Visual C++ 2010创建Ribbon界面(上)

    随着Office 2007的发布,它改变了以往传统的下拉式菜单用户界面,取而代之的是全新的被称之为"Ribbon"的固定式工具栏界面.微软声称这种新的用户界面能够使用户更容易地使用 ...

  4. 结合iconworkshop,创建ribbon界面

    mfc实现的程序中,ribbon界面是主流,比较适合测量类项目.几个修改图标的小技巧: 1.现有的bmp,可以直接修改 在好几个地方,已经将IDB_*和显示效果对接清楚了,直接修改这里的bmp,就可以 ...

  5. VC++ 2010 创建高级Ribbon界面详解(2)

    Ribbon 控件的使用 1.命令按钮 命令按钮可以说是我们最常用的Ribbon控件了,我们通常都是通过命令按钮来发送某个命令,执行某个动作.它代替了过去的菜单命令,成为使用最频繁的Ribbon控件. ...

  6. (转载)VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)...

    上一节中鸡啄米讲了GDI对象之画刷CBrush,至此图形图像的入门知识就讲完了.从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容.本文先来说说如何创建Ribbon样式的应用程序框架. Rib ...

  7. VS2010/MFC编程入门之一(Ribbon界面开发:创建Ribbon样式的应用程序框架)

    Ribbon界面就是微软从Office2007开始引入的一种为了使应用程序的功能更加易于发现和使用.减少了点击鼠标的次数的新型界面,从实际效果来看,不仅外观漂亮,而且功能直观,用户操作简洁方便. 鸡啄 ...

  8. 在C#中使用Ribbon界面(一)——创建一个Ribbon窗口

    自Office2007开始,软件都逐渐地采用了Ribbon界面,一方面是时尚,如同许多厂商声称的那样,是 state of arts,另外,通过调查表明,Ribbon界面比传统的下拉栏菜单方式的工作效 ...

  9. c# cad二次开发 ribbon界面 给CAD加个菜单栏

    c# cad二次开发 ribbon界面 给CAD加个菜单栏 using System; using System.Collections.Generic; using System.Text; usi ...

  10. 使用AutoCAD 2021创建真实世界的土木设计项目

    由工程组织创建|最后更新日期:2021年9月 时长:7h 24m | 7节| 64节讲座|视频:1280×720,44 KHz | 大小解压后3 GB 流派:电子学习|语言:英语+中英文字幕(根据原英 ...

最新文章

  1. arcgis select by attributes一次选多个_地理工具学习--arcgis篇:单工具学习(2)
  2. hikaril连接sql2000_hikari连接池解析(版本:HikariCP-2.5.1.jar)
  3. cpu序列号唯一吗_怎么看电脑硬件是不是新的 有什么软件能检测吗?
  4. 当使用easyui时,表单的onchange事件失效
  5. Redis五种数据类型介绍
  6. 详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
  7. 配置mysql字符_mysql字符设置
  8. 常用开发工具、网站、文章、博客、官网、资源、牛人等推荐(持续更新)
  9. oracle vm virtualbox安装xp系统,怎么使用VirtualBOX安装XP系统?VirtualBOX安装WinXp系统图文教程...
  10. Java实战之管家婆记账系统(24)——项目总结
  11. 7-5 鸡兔同笼 C++编程练习
  12. 关于breadcrumb面包屑
  13. 虚拟服务器机是什么,什么是国内双线虚拟主机
  14. 在iOS上建局域网网站
  15. python怎么算一元二次方程_python如何解一元二次方程
  16. 【百度地图API】你看过房产地图吗?你知道房产标注是如何建立的吗?
  17. 如何在日内趋势中交易?
  18. java语言的编译器命令_Java编译器的命令是( )
  19. POJ 3470 Walls 已翻译
  20. 证明:两个积性函数的狄利克雷乘积为积性函数

热门文章

  1. ArcMap通过空间校正工具转换BJ-54坐标系到WGS-84坐标系
  2. Dagger2入门到放弃
  3. C语言与三菱plc通讯案例,三菱PLC的通讯与编程案例
  4. 计算机ppt听课记录,怎样做好听课记录.ppt
  5. 具有相关关系的数据处理:线性混合模型与广义线性混合模型
  6. esxi install DS3615XS
  7. java获取图片流_JAVA IO流读取图片的问题
  8. JAVA前后端分离项目脚手架
  9. 总结使用SnakeYAML解析与序列化YAML相关
  10. 7-33 统计素数并求和