objectarx arxdbg into

01、acedAddDefaultContextMenu 添加右键菜单项

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

aced.h

Parameters
Description
AcEdUIContext * pContext
Pointer to AcEdUIContext callback class
const void * appId
Pointer passed in by AutoCAD in acrxEntryPoint when application receives kInitAppMsg
const ACHAR* appName = NULL
Optional name that will become submenu item in the default mode shortcut menu

This function adds a default mode shortcut menu (AcEdUIContext instance).

The appName should be based on the name of the ObjectARX application. If an appName is not given, the filename of the application will be used.

Returns Adesk::kTrue if successful; otherwise, returns Adesk::kFalse.

sample http://www.cnblogs.com/kevinzhwl/p/3894781.html#undefined

[转]objectarx 加载菜单-ObjectARX中右键(快捷)菜单的实现方法
批注:
由网文整理而成,原文地址 http://blog.csdn.net/kyfvc/article/details/9121737
其中一些API已经有更方便的替代品了,比如push/popResource 已经有了 CAcModuleResourceOverride
另外 有些地方的push/pop资源是否需要也待商榷。
具体区别可以对照ObjectARX 2012 Sample中 ArxDbg

  右键菜单,也叫快捷菜单,在Windows编程中叫上下文(context)菜单。
  
  ObjectARX本身提供了一套处理上下文菜单的机制。在ObjectARX类库中有一个名为AcEdUIContext的类,此类负责在ObjectARX应用中的上下文菜单中添加自己的菜单项,而原菜单项不会被破坏,这也是此种方法的优点之一。用AcEdUIContext类添加菜单时,菜单项的数目没有限制,但必须是文本菜单。菜单可以层叠,但不允许使用键盘加速键,不能够在状态行显示快捷菜单命令状态提示。

此类可以处理三种情况下的上下文菜单:

一个默认上下文菜单,
二是实体对象上下文菜单,
三是命令执行时上下文菜单。
虽然菜单出现的时机不同,但方法基本相同,它们之间主要的不同是所用的加载和卸载函数不同。下面加以详细介绍。

  在AcEdUIContext为中包含了三个重要的成员函数,他们分别是:

(1) AutoCAD系统获取快捷菜单句柄函数
virtual void * getMenuContext(const AcRxClass * unnamed,const AcDbObjectIdArray& unnamed) = 0;
其中,第一个参数unnamed 是当前所选择的实体的对象句柄,第二个参数unnamed是所选实体的实体ID数组。这两个参数只有在实体对象上下文菜单中有效。

(2) 菜单项命令事件响应函数
virtual void onCommand(Adesk::UInt32 unnamed) = 0;
其中,unnamed是相应菜单项的菜单ID。此函数在用户选择执行快捷菜单中的某个菜单项时被调用。

(3) 菜单更新函数
virtual void OnUpdateMenu();
AutoCAD在快捷菜单弹出之前调用此函数。相当于MFC中的菜单更新事件,我们可以在这个函数中改变菜单项的检查状态或使能菜单项等。

其实,我们利用ObjectARX实现上下文菜单要做的工作主要是重载并填写这几个AcEdUIContext成员函数,其操作方法如下:

首先,我们从AcEdUIContext类派生一个自己的类,名字就叫CDefaultContextMenu吧,当然,你可以按自己的喜好起名字了:-)。然后,在派生的类中重载以上三个函数。
class CDefaultContextMenu: public AcEdUIContext
{
public:
CDefaultContextMenu();
~CDefaultContextMenu();

// 如下重载以下三个函数
virtual void* getMenuContext(const AcRxClass *pClass, const AcDbObjectIdArray& ids) ;
virtual void onCommand(Adesk::UInt32 cmdIndex);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值