南阳千牛网站建设,公司标志设计,nginx网站301重定向怎么做,做网站编程序这篇文章是教大家怎样子创建自己的Ribbon按钮界面#xff08;如下图#xff09;#xff0c;以下示例代码在CAD2020中运行实现。 背景 创建一个属于自己的Ribbon按钮#xff08;如下图#xff09; 理解Ribbon、Panel、Tab的关系#xff08;如下图#xff09;#xff… 这篇文章是教大家怎样子创建自己的Ribbon按钮界面如下图以下示例代码在CAD2020中运行实现。 背景 创建一个属于自己的Ribbon按钮如下图 理解Ribbon、Panel、Tab的关系如下图一个Tab包含多个Panel一个Panel包含多个RibbonButton
代码
using Autodesk.AutoCAD.Runtime;
using Autodesk.Windows;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Interop;
using System.Windows.Media.Imaging;[assembly:CommandClass(typeof(CADBlogDemo.Ribbon))]
namespace CADBlogDemo
{public class Ribbon{[CommandMethod(RibbonCmd)]public void RibbonCmd(){//得到所有的Ribbon选项卡列表集合RibbonControl ribbonCtrl ComponentManager.Ribbon;if (ribbonCtrl null) return;//加个判断如果有了这个选项卡就不重复添加if (ribbonCtrl.Tabs.FirstOrDefault(x x.Title MyRibbon) ! null) return;//添加选项卡RibbonTab tab AddTab(ribbonCtrl, MyRibbon, RibbonId1, true);//添加面板RibbonPanelSource panel AddPanel(tab, 我就是我);//添加按钮RibbonButton button CreateRibbonButton(panel, 点我\n点我, Demo\n, ${Path.GetDirectoryName(typeof(Ribbon).Assembly.Location)}\Images\123.png);}/// summary/// 添加Ribbon选项卡/// /summary/// param nameribbonCtrlRibbon控制器/param/// param nametitle选项卡标题/param/// param nameid选项卡ID/param/// param nameisActive是否置为当前/param/// returnsRibbonTab/returnspublic RibbonTab AddTab( RibbonControl ribbonCtrl, string title, string id, bool isActive){RibbonTab tab new RibbonTab();tab.Title title;tab.Id id;ribbonCtrl.Tabs.Add(tab);tab.IsActive isActive;return tab;}/// summary/// 添加面板/// /summary/// param nametabRibbon选项卡/param/// param nametitle面板标题/param/// returnsRibbonPanelSource/returnspublic RibbonPanelSource AddPanel(RibbonTab tab, string title){RibbonPanelSource panelSource new RibbonPanelSource();panelSource.Title title;RibbonPanel ribbonPanel new RibbonPanel();ribbonPanel.Source panelSource;tab.Panels.Add(ribbonPanel);return panelSource;}/// summary/// 创建按钮/// /summary/// param namepanel面板/param/// param namename按钮显示名字/param/// param namecmd需要绑定的命令/param/// param namephotoPath图片路径/param/// returns/returnspublic RibbonButton CreateRibbonButton(RibbonPanelSource panel, string name, string cmd, string photoPath){RibbonButton button new RibbonButton();button.Text name;button.ShowText true;Bitmap bitmap new Bitmap(photoPath);BitmapSource bitmapSource Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, System.Windows.Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());button.Image bitmapSource; //按钮图片button.LargeImage bitmapSource; //按钮大图片button.Size RibbonItemSize.Large;button.Orientation System.Windows.Controls.Orientation.Vertical;button.CommandHandler new RibbonCommandHandler();button.CommandParameter cmd;panel.Items.Add(button);return button;}}public class RibbonCommandHandler : System.Windows.Input.ICommand{public bool CanExecute(object parameter){return true;}public event EventHandler CanExecuteChanged;public void Execute(object parameter){//is from Ribbon ButtonRibbonButton ribBtn parameter as RibbonButton;if (ribBtn ! null){//execute the command Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.SendStringToExecute((string)ribBtn.CommandParameter, true, false, true);}}}
}
讲解
先得到所有的Tab列表集合判断是否已经存在自己的选项卡了 //得到所有的Ribbon选项卡列表集合RibbonControl ribbonCtrl ComponentManager.Ribbon;if (ribbonCtrl null) return;新建选项卡Tab
/// summary/// 添加Ribbon选项卡/// /summary/// param nameribbonCtrlRibbon控制器/param/// param nametitle选项卡标题/param/// param nameid选项卡ID/param/// param nameisActive是否置为当前/param/// returnsRibbonTab/returnspublic RibbonTab AddTab( RibbonControl ribbonCtrl, string title, string id, bool isActive){RibbonTab tab new RibbonTab();tab.Title title;tab.Id id;ribbonCtrl.Tabs.Add(tab);tab.IsActive isActive;return tab;}新建面板panel
/// summary/// 添加面板/// /summary/// param nametabRibbon选项卡/param/// param nametitle面板标题/param/// returnsRibbonPanelSource/returnspublic RibbonPanelSource AddPanel(RibbonTab tab, string title){RibbonPanelSource panelSource new RibbonPanelSource();panelSource.Title title;RibbonPanel ribbonPanel new RibbonPanel();ribbonPanel.Source panelSource;tab.Panels.Add(ribbonPanel);return panelSource;}新建按钮Ribbon /// summary/// 创建按钮/// /summary/// param namepanel面板/param/// param namename按钮显示名字/param/// param namecmd需要绑定的命令/param/// param namephotoPath图片路径/param/// returns/returnspublic RibbonButton CreateRibbonButton(RibbonPanelSource panel, string name, string cmd, string photoPath){RibbonButton button new RibbonButton();button.Text name;button.ShowText true;Bitmap bitmap new Bitmap(photoPath);BitmapSource bitmapSource Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, System.Windows.Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());button.Image bitmapSource; //按钮图片button.LargeImage bitmapSource; //按钮大图片button.Size RibbonItemSize.Large;button.Orientation System.Windows.Controls.Orientation.Vertical;button.CommandHandler new RibbonCommandHandler();button.CommandParameter cmd;panel.Items.Add(button);return button;}RibbonCommandHandler类 继承于ICommand类作用是控制按钮是否可用 public class RibbonCommandHandler : System.Windows.Input.ICommand{public bool CanExecute(object parameter){return true;}public event EventHandler CanExecuteChanged;public void Execute(object parameter){//is from Ribbon ButtonRibbonButton ribBtn parameter as RibbonButton;if (ribBtn ! null){//execute the command Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.SendStringToExecute((string)ribBtn.CommandParameter, true, false, true);}}}最后在CAD中用Netload添加编译的Dll运行“RibbonCmd”命令就可以看到选项卡了
最后
创建按钮的时候传入的是相对地址复制代码使用的时候可以先换成绝对地址实现效果后再换相对地址。赶紧去实现第一个按钮吧