栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

AutoCAD中.Net实现打开程序自动加载菜单栏的方法

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

AutoCAD中.Net实现打开程序自动加载菜单栏的方法

背景

在用.net做CAD经典模式菜单栏功能的时候想要实现打开CAD自动加载,于是经过查阅相关文档和代码运行测试,发现可以通过实现IExtensionApplication接口的方式达到这个目的。

相关文档说明
  • 当AutoCAD装载一个托管程序时,它查询程序的装配件(assembly)是否有ExtensionApplication自定义特性性。如果它找到这个特性,AutoCAD把这个特性所联系的类型作为程序的入口点。如果没有找到这个特性,AutoCAD查找所有实现IExtensionApplication接口的输出类。如果没有找到相关的接口实现,AutoCAD就会跳过程序的初始化步骤。
  • ExtensionApplication特性只能被附加到一个类型。这个被附加的类型必须实现IExtensionApplication接口。
代码

这里重要的是实现IExtensionApplication接口,并重写接口的初始化方法和终止方法,以创建一个简单菜单栏并实现自动加载为例体现该解决路径。

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Runtime;
using CadApplication;

[assembly: ExtensionApplication(typeof(AcadNetApp))] //启动时加载工具栏,注意typeof括号里的类库名
namespace CadApplication
{
    //实现接口
    public class AcadNetApp : IExtensionApplication
    {
        //重写接口里的初始化方法
        public void Initialize()
        {
            //加载后初始化的程序放在这里 这样程序一加载DLL文件就会执行
            var doc = Application.DocumentManager.MdiActiveDocument;
            doc.Editor.WriteMessage("n加载程序中...n");
            //加载菜单栏
            AddMenu(doc);
        }
        //创建菜单栏
        public void AddMenu(Document doc)
        {
            if (Application.AcadApplication is AcadApplication cadApp)
            {
                var addinMenu = cadApp.MenuGroups.Item(0).Menus.Add("XXX工具");
                //命令“DWGTools”后面需要加空格,来代替手动空格,命令逻辑代码这里不进一步展开。
                addinMenu.AddMenuItem(addinMenu.Count, "XXX功能", "DWGTools ");
                var isShown = false;
                foreach (AcadPopupMenu menu in cadApp.MenuBar)
                {
                    if (menu.Name == addinMenu.Name)
                    {
                        isShown = true;
                        break;
                    }
                }
                if (!isShown)
                {
                    addinMenu.InsertInMenuBar(cadApp.MenuBar.Count);
                }
            }
        }
		//重写接口的终止方法
        public void Terminate()
        {
        //清理程序,可空
        }
    }
}


作者:RegalZ
根据个人学习经验撰写,如有错误,敬请指正。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909382.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号