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

Steven R. Davidson vze266ft en verizon.net
Mar Feb 19 05:04:47 CET 2008


Hola José Alberto,

Jose Alberto Marza wrote:
> Hola amigo:
> 
> Lo que quiero saber es el índice del botón de la toolbar que contiene el
> ID que busco. Este ID es un item que esta dentro del menú desplegable
> del botón.
> 

Bien. Creo que enviando el mensaje 'TB_COMMANDTOINDEX' a la barra de 
herramientas es lo que necesitas. Por ejemplo,

int nIndice = (int) SendMessage( hTB, TB_COMMANDTOINDEX, nID, 0 );

Ahora bien, esto sólo funcionará si el ID del elemento del menú coincide 
con el ID del comando del botón de la barra de herramientas. Por ejemplo,

TBBUTON tbb[10];
...
tbb[0].idCommand = IDS_COPIAR;
tbb[1].idCommand = IDS_PEGAR;
tbb[2].idCommand = IDS_EDITAR;
tbb[3].idCommand = IDS_BUSCAR;
...
SendMessage( hTB, TB_ADDBUTTONS, 10, (LPARAM) tbb );

Y luego para el menú, tienes algo como lo siguiente,

HMENU hSubMenu = CreatePopupMenu();
TCHAR szText[][10] = { TEXT("&Copiar"), TEXT("&Pegar"), TEXT("&Editar"), 
TEXT("&Buscar") };

MENUITEMINFO mii = { sizeof(MENUITEMINFO), MIIM_STRING | MIIM_ID };

mii.wID = IDS_COPIAR;
mii.dwTypeData = szText[0];
mii.cch = lstrlen( szText[0] );
InsertMenuItem( hSubMenu, 0, FALSE, &mii );

mii.wID = IDS_PEGAR;
mii.dwTypeData = szText[1];
mii.cch = lstrlen( szText[1] );
InsertMenuItem( hSubMenu, 1, FALSE, &mii );
...

Como puedes ver usamos los mismos valores para 'idCommand' de 'TBBUTTON' 
que para 'wID' de 'MENUITEMINFO'. Si estableces esto, entonces puedes 
usar el mensaje 'TB_COMMANDTOINDEX' para tu propósito. Para poder 
mostrar el menú desplegable, al pulsar el botón en la barra de 
herramientas, necesitarás hacerlo al procesar el mensaje 'WM_NOTIFY'. El 
parámetro 'lParam' te ayudará en este aspecto al recibir el manipulador 
del control de la barra de tareas. Esto es,

case WM_NOTIFY:
   if( TBN_DROPDOWN == ((LPNMHDR)lParam)->code )
   {
     LPNMTOOLBAR lpnmtb = (LPNMTOOLBAR) lParam;
     int nIndice = (int) SendMessage( lpnmtb->hdr.hwndFrom, 
TB_COMMANDTOINDEX, lpnmtb->iItem, 0 );
     ...
     return TBDDRET_DEFAULT;
   }
return 0;


Espero que esto te ayude.

Steven






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