天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 70|回复: 0

ARX定制CAD的右键菜单

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
ARX定制CAD的右键菜单,CAD的右键菜单可以分为很多类,但没有选中实体时

的菜单只有一类(defaultContextMenu),然而你可以为每一个实体类型定义一个右键菜单类型。整个

CAD中针对每个类(objectContextMenu)的处理方法都是这样的,类似于扩展协议一样,如果每一类实

体没有自己定义扩展协议,则按CAD默认的处理方法。ContextMenu主要包括的就是

defaultContextMenu 和 objectContextMenu,在我们软件中,也用到了这个类型,主要的核心就是,

你必须继承一个父类,并且实现三个方法:
AcEdUIContext类,并且实现以下三个方法。
    virtual void* getMenuContext(const AcRxClass *pClass, const AcDbObjectIdArray& ids) ;
    virtual void onCommand(Adesk::UInt32 cmdIndex);
virtual void OnUpdateMenu();

其中 getMenuContext()和onUpdateMenu()这两个函数是CAD本身自己调用的。onCommand是单击了右键

之后,选择了其中一项后,再执行的,在这里,你可以对不同项进行不同的操作。
在getMenuContext()函数中,返回你所要弹出的的菜单句柄,每次右键都会调用
在onUpDateMenu()函数中,更新你的菜单,每次右键都会调用。
执行了单击右键菜单中的某一项之后,就会调用onCommand()函数,以便开发人员能做一些处理。

在CAD里注册和注销右键菜单,主要使用这四个接口
Adesk::Boolean acedAddObjectContextMenu(const AcRxClass *pClass,
                                        AcEdUIContext *pContext,
                                        const void *appId);
Adesk::Boolean acedRemoveObjectContextMenu(const AcRxClass *pClass,
                                           AcEdUIContext *pContext);

Adesk::Boolean acedAddDefaultContextMenu(AcEdUIContext *pContext,
                                         const void *appId,
                                         const ACHAR* appName=NULL);
Adesk::Boolean acedRemoveDefaultContextMenu(AcEdUIContext *pContext);

默认菜单,是不区分类别的,调用方法如下:
UeDefaultMenu* pDefaultMenu = new UeDefaultMenu;
acedAddDefaultContextMenu(pDefaultMenu, pAppID); 注册
acedRemoveDefaultContextMenu(pDefaultMenu); 注销

Object菜单是区分类别的,调用方法如下:
UeCircleMenu* pCircleMenu = new UeCircleMenu;
UeLineMenu* pLineMenu = new UeLineMenu;
acedAddObjectContextMenu(AcDbCircle::desc(),pCircleMenu, pAppID);
acedRemoveObjectContextMenu(AcDbCircle::desc(),pCircleMenu);
acedAddObjectContextMenu(AcDbLine::desc(),pLineMenu, pAppID)
acedRemoveObjectContextMenu(AcDbLine::desc(),pLineMenu);还有在注册和注销菜单操作的时候,一定要注意资源切换

Load() //一般在ARX加载时进行
{
acDocManager->pushResourceHandle(_hdllInstance);
//dosomething for menu
acDocManager->popResourceHandle();
}  

Unload() //一般在ARX卸载时进行
{
HINSTANCE hInst = AfxGetResourceHandle();
AfxSetResourceHandle(_hdllInstance);

//dosomething for menu

AfxSetResourceHandle(hInst);
}

 

 

 

 

ARX定制CAD的右键菜单
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:32 , Processed in 0.157522 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表