void CMenuNotify::Notify(TNotifyUI& msg) { if( msg.sType == DUI_MSGTYPE_ITEMCLICK) { CMenuElementUI *pMenuElement = (CMenuElementUI*)msg.pSender; CPaintManagerUI *m_pm = pMenuElement->GetManager(); if (m_pm != NULL) { CControlUI *pRootControl = m_pm->GetRoot(); if (pRootControl != NULL) { CDuiString szMenuName = pRootControl->GetName(); //if (szMenuName == _T("workstation_menu")) //{ CDuiString szText = pMenuElement->GetText(); int index = pMenuElement->GetIndex(); bool bTickStatus = false; switch (index) { case 0: PostMessage(pMainFrame->m_hWnd,WM_CLICKABOUT,0,0); break; } //} } } } }
void MsgBubbleItem::PopupMenu( bool copy ) { if(!action_menu_) return; POINT point; ::GetCursorPos(&point); CMenuWnd* pMenu = new CMenuWnd(NULL); STRINGorID xml(L"bubble_menu.xml"); pMenu->Init(xml, _T("xml"), point); CMenuElementUI* cop = (CMenuElementUI*) pMenu->FindControl(L"copy"); cop->AttachSelect(nbase::Bind(&MsgBubbleItem::OnMenu, this, std::placeholders::_1)); cop->SetVisible(copy); CMenuElementUI* del = (CMenuElementUI*)pMenu->FindControl(L"delete"); del->AttachSelect(nbase::Bind(&MsgBubbleItem::OnMenu, this, std::placeholders::_1)); CMenuElementUI* transform = (CMenuElementUI*)pMenu->FindControl(L"transform"); transform->AttachSelect(nbase::Bind(&MsgBubbleItem::OnMenu, this, std::placeholders::_1)); transform->SetVisible(typeid(*this) == typeid(MsgBubbleAudio)); pMenu->Show(); }
bool CMenuUI::AddAt(CControlUI* pControl, int iIndex) { CMenuElementUI* pMenuItem = static_cast<CMenuElementUI*>(pControl->GetInterface(kMenuElementUIInterfaceName)); if (pMenuItem == NULL) return false; for (int i = 0; i < pMenuItem->GetCount(); ++i) { if (pMenuItem->GetItemAt(i)->GetInterface(kMenuElementUIInterfaceName) != NULL) { (static_cast<CMenuElementUI*>(pMenuItem->GetItemAt(i)->GetInterface(kMenuElementUIInterfaceName)))->SetInternVisible(false); } } return CListUI::AddAt(pControl, iIndex); }
void MainForm::PopupMainMenu(POINT point) { //创建菜单窗口 CMenuWnd* pMenu = new CMenuWnd(NULL); STRINGorID xml(L"main_menu.xml"); pMenu->Init(xml, _T("xml"), point); //注册回调 CMenuElementUI* look_log = (CMenuElementUI*)pMenu->FindControl(L"look_log"); look_log->AttachSelect(nbase::Bind(&MainForm::LookLogMenuItemClick, this, std::placeholders::_1)); CMenuElementUI* file_trans = (CMenuElementUI*)pMenu->FindControl(L"file_helper"); file_trans->AttachSelect(nbase::Bind(&MainForm::FileTransMenuItemClick, this, std::placeholders::_1)); CMenuElementUI* address = (CMenuElementUI*)pMenu->FindControl(L"address"); address->AttachSelect(nbase::Bind(&MainForm::AddressMenuItemClick, this, std::placeholders::_1)); CMenuElementUI* export_msglog = (CMenuElementUI*)pMenu->FindControl(L"export_msglog"); export_msglog->AttachSelect(nbase::Bind(&MainForm::ExportMsglogMenuItemClick, this, std::placeholders::_1)); CMenuElementUI* import_msglog = (CMenuElementUI*)pMenu->FindControl(L"import_msglog"); import_msglog->AttachSelect(nbase::Bind(&MainForm::ImportMsglogMenuItemClick, this, std::placeholders::_1)); CMenuElementUI* clear_chat_record = (CMenuElementUI*)pMenu->FindControl(L"clear_chat_record"); clear_chat_record->AttachSelect(nbase::Bind(&MainForm::ClearChatRecordMenuItemClick, this, true, std::placeholders::_1)); CMenuElementUI* clear_chat_record_ex = (CMenuElementUI*)pMenu->FindControl(L"clear_chat_record_ex"); clear_chat_record_ex->AttachSelect(nbase::Bind(&MainForm::ClearChatRecordMenuItemClick, this, false, std::placeholders::_1)); CMenuElementUI* clear_chat_record_p2p = (CMenuElementUI*)pMenu->FindControl(L"clear_chat_record_p2p"); clear_chat_record_p2p->AttachSelect(nbase::Bind(&MainForm::ClearChatRecordBySessionTypeMenuItemClick, this, true, nim::kNIMSessionTypeP2P, std::placeholders::_1)); CMenuElementUI* clear_chat_record_p2p_ex = (CMenuElementUI*)pMenu->FindControl(L"clear_chat_record_p2p_ex"); clear_chat_record_p2p_ex->AttachSelect(nbase::Bind(&MainForm::ClearChatRecordBySessionTypeMenuItemClick, this, false, nim::kNIMSessionTypeP2P, std::placeholders::_1)); CMenuElementUI* clear_chat_record_team = (CMenuElementUI*)pMenu->FindControl(L"clear_chat_record_team"); clear_chat_record_team->AttachSelect(nbase::Bind(&MainForm::ClearChatRecordBySessionTypeMenuItemClick, this, true, nim::kNIMSessionTypeTeam, std::placeholders::_1)); CMenuElementUI* clear_chat_record_team_ex = (CMenuElementUI*)pMenu->FindControl(L"clear_chat_record_team_ex"); clear_chat_record_team_ex->AttachSelect(nbase::Bind(&MainForm::ClearChatRecordBySessionTypeMenuItemClick, this, false, nim::kNIMSessionTypeTeam, std::placeholders::_1)); CMenuElementUI* vchat_setting = (CMenuElementUI*)pMenu->FindControl(L"vchat_setting"); vchat_setting->AttachSelect(nbase::Bind(&MainForm::VChatSettingMenuItemClick, this, std::placeholders::_1)); CMenuElementUI* rts_replay = (CMenuElementUI*)pMenu->FindControl(L"rts_replay"); rts_replay->AttachSelect(nbase::Bind(&MainForm::RtsReplayMenuItemClick, this, std::placeholders::_1)); CMenuElementUI* about = (CMenuElementUI*)pMenu->FindControl(L"about"); about->AttachSelect(nbase::Bind(&MainForm::AboutMenuItemClick, this, std::placeholders::_1)); CMenuElementUI* logoff = (CMenuElementUI*)pMenu->FindControl(L"logoff"); logoff->AttachSelect(nbase::Bind(&MainForm::LogoffMenuItemClick, this, std::placeholders::_1)); CMenuElementUI* quit = (CMenuElementUI*)pMenu->FindControl(L"quit"); quit->AttachSelect(nbase::Bind(&MainForm::QuitMenuItemClick, this, std::placeholders::_1)); //显示 pMenu->Show(); }
void CFrameWnd::Notify( TNotifyUI& msg ) { if( msg.sType == _T("click") ) { if( msg.pSender->GetName() == _T("btnMenu") ) { CPoint point(0, 0); GetCursorPos(&point); CMenuWnd* pMenu = CMenuWnd::CreateMenu(NULL, _T("menutest.xml"), point, &m_PaintManager, &m_MenuCheckInfo); //左侧打开菜单 //CMenuWnd* pMenu = CMenuWnd::CreateMenu(NULL, _T("menutest.xml"), point, &m_PaintManager, &m_MenuCheckInfo, eMenuAlignment_Right ); //左上侧打开菜单 //CMenuWnd* pMenu = CMenuWnd::CreateMenu(NULL, _T("menutest.xml"), point, &m_PaintManager, &m_MenuCheckInfo, eMenuAlignment_Right | eMenuAlignment_Bottom); // 先获取到根项,然后就可以使用rootMenu插到到菜单内的任意子菜单项,然后做添加删除操作 CMenuUI* rootMenu = pMenu->GetMenuUI(); if (rootMenu != NULL) { CMenuElementUI* pNew = new CMenuElementUI; pNew->SetName(_T("Menu_Dynamic")); pNew->SetText(_T("动态一级菜单")); pNew->SetShowExplandIcon(true); pNew->SetIcon(_T("WebSit.png")); pNew->SetIconSize(16,16); CMenuElementUI* pSubNew = new CMenuElementUI; pSubNew->SetText(_T("动态二级菜单")); pSubNew->SetName(_T("Menu_Dynamic")); pSubNew->SetIcon(_T("Virus.png")); pSubNew->SetIconSize(16,16); pNew->Add(pSubNew); rootMenu->Add(pNew); CMenuElementUI* pNew2 = new CMenuElementUI; pNew2->SetName(_T("Menu_Dynamic")); pNew2->SetText(_T("动态一级菜单2")); rootMenu->AddAt(pNew2,2); } // 动态添加后重新设置菜单的大小 pMenu->ResizeMenu(); } else if (msg.pSender->GetName() == _T("Menu_btn") ) { DUI__Trace(_T("你单击了按钮")); } } __super::Notify(msg); }
void MsgBubbleItem::PopupMenu(bool copy, bool recall, bool retweet/* = true*/) { if(!action_menu_) return; POINT point; ::GetCursorPos(&point); CMenuWnd* pMenu = new CMenuWnd(NULL); STRINGorID xml(L"bubble_menu.xml"); pMenu->Init(xml, _T("xml"), point); CMenuElementUI* cop = (CMenuElementUI*) pMenu->FindControl(L"copy"); cop->AttachSelect(nbase::Bind(&MsgBubbleItem::OnMenu, this, std::placeholders::_1)); cop->SetVisible(copy); CMenuElementUI* del = (CMenuElementUI*)pMenu->FindControl(L"delete"); del->AttachSelect(nbase::Bind(&MsgBubbleItem::OnMenu, this, std::placeholders::_1)); CMenuElementUI* transform = (CMenuElementUI*)pMenu->FindControl(L"transform"); transform->AttachSelect(nbase::Bind(&MsgBubbleItem::OnMenu, this, std::placeholders::_1)); transform->SetVisible(typeid(*this) == typeid(MsgBubbleAudio)); CMenuElementUI* rec = (CMenuElementUI*)pMenu->FindControl(L"recall"); rec->AttachSelect(nbase::Bind(&MsgBubbleItem::OnMenu, this, std::placeholders::_1)); rec->SetVisible(my_msg_ && recall && msg_.receiver_accid_ != LoginManager::GetInstance()->GetAccount()); CMenuElementUI* ret = (CMenuElementUI*)pMenu->FindControl(L"retweet"); ret->AttachSelect(nbase::Bind(&MsgBubbleItem::OnMenu, this, std::placeholders::_1)); ret->SetVisible(retweet); pMenu->Show(); }