Tutorial: Poner controles en las barras de herramientas
En este artículo se describe cómo agregar a una barra de herramientas un botón de barra de herramientas que contiene un control de Windows. En MFC, un botón de barra de herramientas debe ser una clase derivada de la clase CMFCToolBarButton, por ejemplo, la clase CMFCToolBarComboBoxButton Class, la clase CMFCToolBarEditBoxButton, la clase CMFCDropDownToolbarButton o la clase CMFCToolBarMenuButton.
Agregar controles a barras de herramientas
Para agregar un control a una barra de herramientas, siga estos pasos:
Reserve un id. de recurso ficticio para el botón en el recurso primario de la barra de herramientas. Para más información sobre cómo crear botones mediante el editor de barras de herramientas de Visual Studio, consulte el artículo Editor de barras de herramientas.
Reserve una imagen de la barra de herramientas (icono de botón) para el botón en todos los mapas de bits de la barra de herramientas principal.
En el controlador de mensajes que procesa el mensaje
AFX_WM_RESETTOOLBAR
, realice los siguientes pasos:Crear el control de botón mediante una clase derivada de
CMFCToolbarButton
.Reemplace el botón ficticio por el nuevo control mediante CMFCToolBar::ReplaceButton. Puede crear el objeto del botón en la pila, porque
ReplaceButton
copia el objeto Button y mantiene la copia.
Nota:
Si ha habilitado la personalización en la aplicación, quizás tenga que restablecer la barra de herramientas mediante el botón Restablecer en la pestaña Barras de herramientas del cuadro de diálogo Personalizar para ver el control actualizado en la aplicación después de volver a compilar. El estado de la barra de herramientas se guarda en el Registro de Windows y la información del Registro se carga y se aplica después de que el método ReplaceButton
se ejecute durante el inicio de la aplicación.
Controles de barra de herramientas y personalización
La pestaña Comandos del cuadro de diálogo Personalizar contiene una lista de comandos que está disponible en la aplicación. De forma predeterminada, el cuadro de diálogo Personalizar procesa los menús de la aplicación y compila una lista de botones de barra de herramientas estándar en cada categoría de menú. Para conservar la funcionalidad extendida que los controles de barra de herramientas proporcionan, debe reemplazar el botón de barra de herramientas estándar por el control personalizado en el cuadro de diálogo Personalizar.
Al habilitar la personalización, se crea el cuadro de diálogo Personalizar en el controlador de personalización OnViewCustomize
mediante la clase CMFCToolBarsCustomizeDialog. Antes de mostrar el cuadro de diálogo Personalizar mediante una llamada a CMFCToolBarsCustomizeDialog::Create, llame a CMFCToolBarsCustomizeDialog::ReplaceButton para sustituir el botón estándar por el nuevo control.
Ejemplo: Crear un cuadro combinado de búsqueda
En esta sección se describe cómo crear un control de cuadro combinado Buscar que aparece en una barra de herramientas y contiene las cadenas de búsqueda usadas recientemente. El usuario puede escribir una cadena en el control y, después, presionar la tecla Entrar para buscar un documento o presionar la tecla Escape para devolver el foco al marco principal. En este ejemplo se supone que el documento aparece en una vista derivada de la clase CEditView.
Crear el control Buscar
Primero, cree el control de cuadro combinado Buscar:
Agregue el botón y los comandos a los recursos de la aplicación:
En los recursos de la aplicación, agregue un nuevo botón con un id. de comando
ID_EDIT_FIND
a una barra de herramientas de la aplicación y a los mapas de bits asociados a la barra de herramientas.Cree un nuevo elemento de menú con el identificador de comando
ID_EDIT_FIND
.Agregue una nueva cadena "Buscar el texto\nBuscar" a la tabla de cadenas y asígnele un id. de comando
ID_EDIT_FIND_COMBO
. Este identificador se utilizará como id. de comando del botón de cuadro combinado Buscar.Nota:
Dado que
ID_EDIT_FIND
es un comando estándar que se procesa medianteCEditView
, no es necesario implementar un controlador especial para este comando. Sin embargo, debe implementar un controlador para el nuevo comandoID_EDIT_FIND_COMBO
.
Cree una nueva clase,
CFindComboBox
, derivada de la clase CComboBox.En la clase
CFindComboBox
, invalide el método virtualPreTranslateMessage
. Este método habilitará el cuadro combinado para procesar el mensaje WM_KEYDOWN. Si el usuario presiona la tecla Escape (VK_ESCAPE
), devuelve el foco a la ventana marco principal. Si el usuario presiona la tecla Entrar (VK_ENTER
), envía a la ventana marco principal un mensaje deWM_COMMAND
que contiene el id. de comandoID_EDIT_FIND_COMBO
.Cree una clase para el botón del cuadro combinado Buscar, derivada de la clase CMFCToolBarComboBoxButton. En este ejemplo, se denomina
CFindComboButton
.El constructor de
CMFCToolbarComboBoxButton
toma tres parámetros: el id. de comando del botón, el índice de la imagen del botón y el estilo del cuadro combinado. Establezca estos parámetros de la siguiente forma:Pase
ID_EDIT_FIND_COMBO
como el id. de comando.Use CCommandManager::GetCmdImage con
ID_EDIT_FIND
para obtener el índice de imágenes.Para obtener una lista de los estilos de cuadro combinado disponibles, consulte Estilos de cuadro combinado.
En la clase
CFindComboButton
, invalide el métodoCMFCToolbarComboBoxButton::CreateCombo
. Aquí se debe crear el objetoCFindComboButton
y devolver un puntero a él.Utilice la macro IMPLEMENT_SERIAL para hacer que el botón combinado sea persistente. El administrador del área de trabajo carga y guarda automáticamente el estado del botón en el Registro de Windows.
Implemente el controlador
ID_EDIT_FIND_COMBO
en la vista del documento. Utilice CMFCToolBar::GetCommandButtons conID_EDIT_FIND_COMBO
para recuperar todos los botones del cuadro combinado Buscar. Puede haber varias copias de un botón con el mismo id. de comando debido a la personalización.En el controlador de mensajes
OnFind
deID_EDIT_FIND
, utilice CMFCToolBar::IsLastCommandFromButton para determinar si se ha enviado el comando Buscar desde el botón de cuadro combinado Buscar. Si es así, busque el texto y agregue la cadena de búsqueda al cuadro combinado.
Agregar el control Buscar a la barra de herramientas principal
Para agregar el botón de cuadro combinado a la barra de herramientas, siga estos pasos:
Implemente el controlador de mensajes
AFX_WM_RESETTOOLBAR
deOnToolbarReset
en la ventana marco principal.Nota:
El marco envía este mensaje a la ventana marco principal cuando se inicializa una barra de herramientas durante el inicio de la aplicación o cuando se restaura una barra de herramientas durante la personalización. En cualquier caso, debe reemplazar el botón de barra de herramientas estándar por el botón del cuadro combinado Buscar personalizado.
En el controlador
AFX_WM_RESETTOOLBAR
, examine el identificador de la barra de herramientas, es decir, WPARAM del mensaje AFX_WM_RESETTOOLBAR. Si el id. de barra de herramientas es igual al de la barra de herramientas que contiene el botón de cuadro combinado Buscar, llame a CMFCToolBar::ReplaceButton para reemplazar el botón Buscar (es decir, el botón con el id. de comandoID_EDIT_FIND)
por un objetoCFindComboButton
.Nota:
Puede crear un objeto
CFindComboBox
en la pila, porqueReplaceButton
copia el objeto Button y mantiene la copia.
Agregar el control Buscar al cuadro de diálogo Personalizar
En el controlador de personalización OnViewCustomize
, llame a CMFCToolBarsCustomizeDialog::ReplaceButton para reemplazar el botón Buscar (es decir, el botón con el id. de comando ID_EDIT_FIND
por un objeto CFindComboButton
.
Consulte también
Gráfico de jerarquías
Clases
CMFCToolBar (clase)
CMFCToolBarButton (clase)
CMFCToolBarComboBoxButton (clase)
CMFCToolBarsCustomizeDialog (clase)