用户可以通过右键菜单事件定制本专业的右键菜单,只需要重写基类BPViewRButtonClickListener_setMenu函数,就可以对平台默认的右键菜单进行增删改等操作,右键菜单的注册同工程事件中的注册位置,注册代码参考示例6-4,实现代码参考6-5、6-6中示例。

static RButtonClickEvent s_RButtonClickEvent;

BIMBase::FrameWork::BPViewRButtonClickListenerCenter::
getInstance().addListener(BPDomainEnvironment::getInstance()->getDomainCodeByKeyName(L"二次开发"), &s_RButtonClickEvent);

代码6-4:右键菜单注册

class RButtonClickEvent : public BIMBase::FrameWork::BPViewRButtonClickListener
{
protected:    
    virtual void_setMenu(BIMBase::FrameWork::RButtonClickItemPtr& initMenu);
};

代码6-5:右键菜单事件示例

void RButtonClickEvent::_setMenu(BIMBase::FrameWork::RButtonClickItemPtr& initMenu)
{    
//添加停靠对话框checkItem项,用于显隐停靠对话框    
    bool bIsDockShow = false;    
    DependencyInversion& depinv = DependencyInversion::instance("DemoGetShowOrHideDockDlg");    
    if (depinv.is<bool(void)>())    
    {        
        auto fun = depinv.get<bool(void)>();        
        bIsDockShow = fun();    
    }    
    initMenu->appendSubItem(L"停靠对话框", L"DemoShowOrHideDockDlg", true, bIsDockShow);

    //添加带子菜单的菜单项,所添加的子菜单与菜单中原始功能一致,只用于演示如何添加子菜单    
    BIMBase::FrameWork::RButtonClickItemPtr    ptrInsertItem = BIMBase::FrameWork::RButtonClickItem::create(L"二次开发", L"");
    ptrInsertItem->appendSubItem(L"复制", L"PBBIM.Tool.Copy");
    ptrInsertItem->appendSubItem(L"删除", L"PBBIM.Tool.Remove", false);
    ptrInsertItem->appendSubItem(L"移动", L"PBBIM.Tool.Move");
    initMenu->insterSubItem(L"停靠对话框", ptrInsertItem);
}

代码6-3:工程事件消息响应和处理示例代码