上节中我们介绍了如何制作自定义菜单即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()
{
// 注册command
acedRegCmds->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() {
// 功能入口,可以是界面程序或其他
acutPrintf(L"\n弹出云图登录对话框!");
}
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::kUnloadAppMsg://App插件卸载消息
{
unloadApp();
break;
}
default:
break;
}
return AcRx::kRetOK;
}
调试验证,
我们appload命令加载arx文件后,菜单上方出现了我们设计的功能菜单:
当在appload中卸载arx文件名后,菜单上方移除了我们的自定义功能菜单: