2009-03-10 10 views
10

Ho un pulsante di menu all'interno di CMFCToolbar e vorrei sostituire la bitmap del pulsante ogni volta che viene selezionata una voce diversa nel menu poiché ogni voce ha la sua icona.Modifica immagine di un pulsante di menu in un CMFCToolbar

Sono riuscito a modificare l'icona utilizzando CMFCToolBarMenuButton::SetImage ma modifica anche l'icona nella voce di menu. Peccato.

alt text http://www.freeimagehosting.net/uploads/137269b0f2.jpgalt text http://www.freeimagehosting.net/uploads/879d03843a.jpg

Ecco un esempio di codice:

if ((pToolbar != NULL) && (idBase != 0)) 
{ 
    int ixButtonToReplace     = pToolbar->CommandToIndex(idBase); 
    CMFCToolBarMenuButton* pBtnToReplace = dynamic_cast<CMFCToolBarMenuButton*> 
               (pToolbar->GetButton(ixButtonToReplace)); 
    if (pBtnToReplace) 
    { 
     const CObList& listCommands = pBtnToReplace->GetCommands(); 
     POSITION pos    = listCommands.GetHeadPosition(); 
     while (pos != NULL) 
     { 
      CMFCToolBarMenuButton* pItem = (CMFCToolBarMenuButton*) listCommands.GetNext(pos); 
      if (pItem && (pItem->m_nID == idButtonToReplaceWith)) 
      { 
       pBtnToReplace->SetImage(pItem->GetImage()); 
      } 
     } 
    } 
} 

Tutte le idee? Grazie.

+1

È la sequenza: 12/Il contenuto è selezionato; clicca sul menu a discesa; clicca su (X)/Nome; L'icona del contenuto ora cambia in Nome? – enriquein

risposta

1

Non sai cosa si intende per pulsante del menu?

Se un altro pulsante viene modificato con il singolo setImage, la chiamata all'evidenza ovvia è che condividono un ID di risorsa di qualche tipo, l'unica soluzione sarebbe quella di assicurarsi che abbiano ID diversi (il che richiederebbe assicurarsi che entrambe le risorse siano gestite separatamente). Ma è da tanto che non ho inserito i file di risorse MFC per confermare questo.

2

Funziona immediatamente. L'unico necessario è chiamare CMFCToolBar::AddToolBarForImageCollection in modo che l'MFC possa sapere quali immagini utilizzare.

Problemi correlati