[C con Clase] Buscar un item dentro de una tool bar.

Steven R. Davidson vze266ft en verizon.net
Sab Feb 16 07:10:34 CET 2008


Hola José Alberto,

Jose Alberto Marza wrote:

> Hola compañeros:
> 
> Tengo un problemilla que no termino de ver como solucionar.
> 
> Tengo una toolbar m_wndTBar que esta formada por varios botones con un 
> menu asociado. Estoy interesado en localizar un item en concreto por 
> toda la toolbar y no lo consigo. Estoy probando con: 
> GetMenuItemInfo(menu,ID_...,&mii);.
> 

No entiendo por qué estás consultando el menú. El control de la barra de 
herramientas (toolbar, en inglés) es un conjunto de botones, o mejor 
dicho un array de estructuras 'TBBUTTON'.

Para conseguir el índice de un botón que te interesa conocer según el 
número de identificación del comando de un botón, puedes enviar el 
mensaje 'TB_COMMANDTOINDEX' al control. Por ejemplo,

int nIndice = SendMessage( m_wndTBar, TB_COMMANDTOINDEX,
                            (WPARAM)nID, 0 );

Dando el índice del botón, puedes enviar el mensaje 'TB_GETBUTTON' para 
conseguir información acerca de tal botón. Por ejemplo,

TBBUTTON tbInfo;

SendMessage( m_wndTBar, TB_GETBUTTON,
              (WPARAM)nIndice, (LPARAM) &tbInfo);

Si quieres más información, puedes enviar el mensaje 'TB_GETBUTTONINFO', 
pero debes pasar un puntero a una estructura 'TBBUTTONINFO' además de la 
identificación de comando del botón. Esto sería,

TBBUTTONINFO tbbiInfo;

int nIndice = SendMessage( m_wndTBar, TB_GETBUTTONINFO,
                            (WPARAM)nID, (LPARAM) &tbbiInfo);


Ahora bien, si estás creando una barra de herramientas con algún botón 
que usa el estilo 'BTNS_DROPDOWN', entonces sí tendrás que crear un menú 
  automático o emergente ("pop-up", en inglés). El menú saldrá al 
procesar el mensaje 'TBN_DROPDOWN' que forma parte del mensaje principal 
'WM_NOTIFY'. Luego, necesitas invocar 'TrackPopupMenuEx()' para 
determinar la selección del usuario.


Espero que esto te sirva.

Steven







Más información sobre la lista de distribución Cconclase