[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