ObjectArx动态加载及卸载自定义菜单

上节中我们介绍了如何制作自定义菜单即cuix文件:给CAD中添加自定义菜单CUIX-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qianlixiaomage/article/details/134349794在此基础上,我们开发时通常需要在ObjectArx程序中进行动态的添加或者删除cuix菜单。

创建ObjectArx程序,添加如下代码即可实现。

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include 
#include 

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() {
	// 功能入口,可以是界面程序或其他
	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文件后,菜单上方出现了我们设计的功能菜单:

ObjectArx动态加载及卸载自定义菜单_第1张图片

点击菜单登录云图,弹出测试弹窗: 

ObjectArx动态加载及卸载自定义菜单_第2张图片

当在appload中卸载arx文件名后,菜单上方移除了我们的自定义功能菜单:

ObjectArx动态加载及卸载自定义菜单_第3张图片

你可能感兴趣的:(CAD,CUIX,OBJECTARX)