2009-03-10 4 views
10

J'ai un bouton de menu à l'intérieur d'un CMFCToolbar et je voudrais remplacer l'image bitmap du bouton chaque fois qu'une entrée différente est sélectionnée dans le menu car chaque entrée a sa propre icône.Changement de l'image d'un bouton de menu dans une barre CMFCT

Je réussis à changer l'icône en utilisant CMFCToolBarMenuButton::SetImage mais cela change aussi l'icône dans l'entrée de menu. Dommage.

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

Voici un exemple de code:

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

Toutes les idées? Je vous remercie.

+1

La séquence est-elle: 12/Le contenu est sélectionné; cliquez sur la liste déroulante; cliquez sur (X)/Nom; L'icône du contenu change maintenant en Nom? – enriquein

Répondre

1

Vous ne savez pas exactement ce que vous entendez par le bouton de menu? Si un autre bouton est modifié avec l'appel unique setImage à l'indication évidente, ils partagent un ID de ressource, la seule solution serait de s'assurer qu'ils ont des ID différents (ce qui nécessiterait de s'assurer que les deux ressources sont traitées séparément). Mais il ya longtemps que je me suis trompé dans les fichiers de ressources MFC pour le confirmer.

2

Fonctionne dès l'installation. Le seul dont vous avez besoin est d'appeler CMFCToolBar::AddToolBarForImageCollection afin que MFC puisse savoir quelles images utiliser.

Questions connexes