2009-03-10 12 views
10

Tengo un botón de menú dentro de CMFCToolbar y me gustaría reemplazar el mapa de bits del botón cada vez que se selecciona una entrada diferente en el menú, ya que cada entrada tiene su propio icono.Cambiar la imagen de un botón de menú en CMFCToolbar

Logré cambiar el ícono usando CMFCToolBarMenuButton::SetImage pero también cambia el ícono en la entrada del menú. Demasiado.

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

Este es un ejemplo de código:

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

¿Alguna idea? Gracias.

+1

Es la secuencia: 12/Contenido seleccionado; haga clic en menú desplegable; haga clic en (X)/Nombre; El ícono del contenido ahora cambia a Nombre? – enriquein

Respuesta

1

¿No está seguro de lo que quiere decir con el botón de menú?

Si se cambia otro botón con la única llamada de imagen establecida a la indicación obvia es que comparten un ID de recurso de algún tipo, la única solución sería asegurarse de tener diferentes ID (lo que requeriría asegurarse de que ambos recursos se manejen por separado) Pero hace mucho tiempo que estropeé los archivos de recursos de MFC para confirmar esto.

2

Funciona de fábrica. Lo único que necesita es llamar al CMFCToolBar::AddToolBarForImageCollection para que MFC pueda saber qué imágenes usar.