2016-01-06 116 views
1

我有一個功能區UI的應用程序。在這個用戶界面中存在一個按鈕,附帶一個菜單。我想要做的是從按鈕處理程序訪問菜單以動態添加和刪除菜單項。功能區UI動態按鈕菜單編輯

void 
CMyScrollView::OnMenuButtonHandler() 
{ 
    // TODO: Add your command handler code here 
    CMFCRibbonBar *pRibbon = ((CMDIFrameWndEx*)GetTopLevelFrame())GetRibbonBar() 
    // Control ID_BTN_EDIT_MENU 
    // This where I would like to isolate and vary menu contents 
} 

回答

1

在CMainFrame窗口創建用於AFX_WM_ON_BEFORE_SHOW_RIBBON_ITEM_MENU消息(ON_REGISTERED_MESSAGE)的處理程序。

檢查按鈕的ID。刪除所有以前的項目,並添加你想要的。

LRESULT CMainFrame::OnBeforeShowRibbonItemMenu(WPARAM,LPARAM lp) 
{ 
    CMFCRibbonBaseElement *pElement = reinterpret_cast<CMFCRibbonBaseElement*>(lp); 

    // Try to get our menu button 
    switch (pElement->GetID()) 
    { 
    case ID_RIBBON_DROPDOWN_BUTTON: 
    { 
     CMFCRibbonButton *pButton = DYNAMIC_DOWNCAST(CMFCRibbonButton, pElement); 
     if (pButton) 
     { 
     // MY_LIST copntains members with the ID and the text: m_uiCmdId, m_strTitle 
     const MY_LIST &list = ....; 
     if (list.size()!=0) 
     { 
      pButton->RemoveAllSubItems(); 

      for (it = list.begin(); it!=list.end(); ++it) 
      pButton->AddSubItem(new CSomeKindOfRibbonButton(it->m_uiCmdId, it->m_strTitle)); 
     } 
     } 
...