上节中我们介绍了如何制作自定义菜单即cuix文件:给CAD中添加自定义菜单CUIX-CSDN博客https://blog.csdn.net/qianlixiaomage/article/details/134349794在此基础上,我们开发时通常需要在ObjectArx程序中进行动态的添加或者删除cuix菜单。
创建ObjectArx程序,添加如下代码即可实现。
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include <aced.h>
#include <rxregsvc.h>void loginCloudDwgServer();
void CLoadMenu();void initApp()
{// 注册commandacedRegCmds->addCommand(L"CLOUD", L"LoginCloudDwg", L"LoginCloudDwg", ACRX_CMD_TRANSPARENT, loginCloudDwgServer);// 加载菜单if (!acedIsMenuGroupLoaded(L"CLOUD")){CLoadMenu();}
}void unloadApp() {// 移除命令组acedRegCmds->removeGroup(L"CLOUD");// 卸载菜单const wchar_t* pMenuPath = L"C:\\Users\\zhen\\Desktop\\cloud.cuix";bool ret = acedUnloadPartialMenu(pMenuPath);if (!ret)acutPrintf(L"\n云图菜单卸载失败!");
}void CLoadMenu()
{// 加载自定义功能菜单const wchar_t* pMenuPath = L"C:\\Users\\zhen\\Desktop\\cloud.cuix";bool ret = acedLoadPartialMenu(pMenuPath);if (!ret)acutPrintf(L"\n云图菜单加载失败!");
}void loginCloudDwgServer() {// 功能入口,可以是界面程序或其他AfxMessageBox(L"云图登录");
}extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
{switch (msg){case AcRx::kInitAppMsg://App插件初始化消息{acrxDynamicLinker->unlockApplication(pkt);acrxRegisterAppMDIAware(pkt);initApp();break;}case AcRx::kQuitMsg:// 推出消息case AcRx::kUnloadAppMsg://App插件卸载消息{unloadApp();break;}default:break;}return AcRx::kRetOK;
}
调试验证,
我们appload命令加载arx文件后,菜单上方出现了我们设计的功能菜单:
点击菜单登录云图,弹出测试弹窗:
当在appload中卸载arx文件名后,菜单上方移除了我们的自定义功能菜单: