2016-01-06 1 views
1

J'ai une application avec une interface de ruban. Dans cette interface utilisateur, un bouton existe avec un menu attaché à celui-ci. Ce que je souhaite faire est d'accéder au menu à partir du gestionnaire de bouton pour ajouter et supprimer dynamiquement des éléments de menu.Ruban UI bouton dynamique menu modifier

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 
} 

Répondre

1

Dans la fenêtre CMainFrame créer un gestionnaire pour le message AFX_WM_ON_BEFORE_SHOW_RIBBON_ITEM_MENU (ON_REGISTERED_MESSAGE).

Vérifiez l'ID du bouton. Supprimer tous les éléments précédents et ajouter celui que vous voulez.

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)); 
     } 
     } 
...