创建cad菜单

cad菜单的创建办法
使用cui自定义,这个是差不多最稳妥的办法了
//创建一个test.mnu文本
//使用时,直接用menuload命令加载即可,加载后可以得到test.cui文件
***MENUGROUP=Polygon
***POP3
PolygonName [Polygon]
Polygon-4 [Polygon-4]^C^C_polygon 4 \I 10
Polygon-5 [Polygon-5]^C^C_polygon 5 \I 10
使用com的方式去创建
//先VS添加TypeLib中的MFC类
//可用的类型库AutoAcad 2010Type Library<1.0>,使用所有接口,创建一个acad.h和acad.cpp
//包含所有的类进去

#include "acad.h"

void AddMenuWithCom()
{
	IAcadApplication acad(acedGetAcadWinApp()->GetIDispatch(TRUE));
	IAcadMenuBar menuBar(acad.GetMenuBar());
	long menuCount = menuBar.GetCount();
	IAcadMenuGroups menuGroups(acad.GetMenuGroups());
	IAcadMenuGroup menuGroup(menuGroups.Item(COleVariant((long)0)));
	IAcadPopupMenus popupMenus(menuGroup.GetMenus());
	IAcadPopupMenu popupMenu(popupMenus.Add(_T("我的自定义菜单")));
	//第一个下拉菜单
	IAcadPopupMenuItem menuItem = popupMenu.AddMenuItem(COleVariant((long)0), _T("直线"), _T("Line "));
	//第二个下拉菜单,带子菜单
	IAcadPopupMenu subMenu(popupMenu.AddSubMenu(COleVariant((long)1), _T("画圆")));
	subMenu.AddMenuItem(COleVariant((long)0), _T("圆形"), _T("Circle "));
	subMenu.AddMenuItem(COleVariant((long)1), _T("弧形"), _T("Arc "));
	//第三个下拉菜单,带子菜单
	IAcadPopupMenu subMenuSub(subMenu.AddSubMenu(COleVariant((long)2), _T("画矩形")));
	subMenuSub.AddMenuItem(COleVariant((long)0), _T("圆形"), _T("Rectangle "));
	//第三个菜单项
    popupMenu.AddMenuItem(COleVariant((long)2), _T("画多端线"), _T("Pline " ));
    popupMenu.InsertInMenuBar(COleVariant(menuCount));
}

void RemoveMenuWithCom()
{
	//...仿造写
}

使用MFC自定义来使用MENU

总结:使用cui自定义菜单最稳妥,无论怎么切换都可以,使用代码的话,会出现一定问题,比如转换工作空间的时候
就会导致菜单丢失,使用cui文件则不会

### 如何在 Visual Studio 中为 CAD 应用程序创建自定义菜单栏 为了在 Visual Studio 中为 CAD 创建自定义菜单栏,可以按照以下方法实现: #### 1. 开发环境配置 确保已安装适合的开发工具链。推荐使用 **Visual Studio 2019 或更高版本**,并选择“使用 C++ 的桌面开发”工作负载[^2]。此外,在安装过程中还需要确认选择了支持 ObjectARX 和 AutoCAD 插件开发的相关组件。 #### 2. 安装必要的框架和支持库 由于某些项目可能依赖于 .NET Framework 支持,因此需要确保目标环境中存在兼容的运行时环境。对于跨平台构建的应用程序,建议安装多架构支持包(x86, x64, IA64),这可以通过单独下载 Microsoft 提供的支持包完成[^3]。 #### 3. 使用 ObjectARX SDK 进行开发 ObjectARX 是 Autodesk 提供的一个强大的 API 集合,允许开发者深入集成到 AutoCAD 核心功能中去。以下是具体操作指南: - #### 初始化项目模板 在新建解决方案时,可以选择基于 MFC 的对话框或者 SDI/MDI 类型作为起点。这些基础结构有助于快速搭建 GUI 组件。 - #### 添加菜单项逻辑 利用 `acadAppDocMenuGroup` 函数注册新的菜单组至当前文档上下文中。需要注意的是,默认情况下新添加的菜单可能是隐藏状态,需显式调用显示命令使其可见[^1]。 ```cpp // 注册一个新的菜单组 Acad::ErrorStatus es = acedRegCmds->addCommand( L"MyCustomMenu", // 命令名称空间前缀 L"&My Menu Item", // 显示名 (带 & 表示快捷键位置) L"MYMENUITEM", // 内部唯一标识符 ACRX_CMD_MODAL); // 模态标志 if (es != Acad::eOk){ acutPrintf(L"\nFailed to add menu item."); } else{ acutPrintf(L"\nSuccessfully added menu item!"); } // 设置菜单可见性 acedSetSystemVariable(L"MENUBAR", 1L); ``` 上述代码片段展示了如何通过编程方式向 AutoCAD 用户界面注入自定义选项,并激活整个菜单栏展示。 #### 4. 处理潜在错误 当调试期间遇到诸如托管调试助手报告 “ContextSwitchDeadlock” 错误消息时,通常表明线程间通信存在问题或者是 COM 对象生命周期管理不当所致[^4]。此时应仔细审查涉及异步处理部分代码,必要时增加同步机制来规避此类异常情况发生。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值