Tutorial: Colocar Controles en las barras de herramientas

En este tema se describe cómo agregar un botón de la barra de herramientas que contiene un control de Windows en una barra de herramientas.En MFC, un botón de la barra de herramientas debe ser CMFCToolBarButton (Clase)- clase derivada, por ejemplo CMFCToolBarComboBoxButton (Clase), CMFCToolBarEditBoxButton (Clase), CMFCDropDownToolbarButton (Clase), o CMFCToolBarMenuButton (Clase).

Agregar Controles a las barras de herramientas

Para agregar un control a una barra de herramientas, siga estos pasos:

  1. Reserva un Id. de recurso ficticio para el botón del recurso primario de la barra de herramientas.Para obtener más información sobre cómo crear botones mediante el editor de la barra de herramientas de Visual Studio, vea el tema de Editor de barras de herramientas .

  2. Reserva una imagen de la barra de herramientas (icono de botón) del botón en todos los mapas de bits de la barra de herramientas principal.

  3. En el controlador de mensajes que procesa el mensaje de AFX_WM_RESETTOOLBAR , haga lo siguiente:

    1. Crear el control de botón mediante CMFCToolbarButton- clase derivada.

    2. Reemplace el botón ficticio con el nuevo control mediante CMFCToolBar::ReplaceButton.Puede crear el objeto del botón en la pila, porque ReplaceButton copia el objeto de botón y mantiene la copia.

[!NOTA]

Si se personalización habilitado en la aplicación, quizás tenga que restaurar la barra de herramientas mediante el botón de Restablecer en la pestaña de Barras de herramientas del cuadro de diálogo de Personalizar para ver el control actualizado en la aplicación después de volver a compilar.Guarda el estado de la barra de herramientas en el Registro de Windows, y la información del registro se carga y se aplica después de que el método de ReplaceButton se ejecute durante el inicio de la aplicación.

Controles de barra de herramientas y personalización

La ficha de Comandos del cuadro de diálogo de 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 la 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 la barra de herramientas estándar con el control personalizado en el cuadro de diálogo de Personalizar .

Cuando se habilita la personalización, crea el cuadro de diálogo de Personalizar en el controlador OnViewCustomize de personalización mediante la clase de CMFCToolBarsCustomizeDialog (Clase) .Antes de mostrar el cuadro de diálogo de Personalizar llamando a CMFCToolBarsCustomizeDialog::Create, llamada CMFCToolBarsCustomizeDialog::ReplaceButton para reemplazar el botón estándar con el nuevo.

Ejemplo: Crear un cuadro combinado de búsqueda

En esta sección se describe cómo crear un control de cuadro combinado de Find 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 de escribir para buscar un documento, o presione la tecla de escape para devolver el foco al marco principal.Este ejemplo supone que el documento aparece en CEditView (Clase)- vista derivada.

Bb983718.collapse_all(es-es,VS.110).gifCrear el Control de búsqueda

Primero, cree el control combobox de Find :

  1. Botón agregar y los comandos a los recursos de la aplicación:

    1. En los recursos de la aplicación, agregue un nuevo botón con un identificador de comando de ID_EDIT_FIND a una barra de herramientas de la aplicación y a un mapa de bits asociado a la barra de herramientas.

    2. Cree un nuevo elemento de menú con el identificador de comando de ID_EDIT_FIND

    3. Agregue una nueva cadena “encuentran el texto \ el nFind” de la tabla de cadenas y asígnele un identificador de comando de ID_EDIT_FIND_COMBOEste identificador se utilizará como identificador de comando del botón del cuadro combinado de Find .

      [!NOTA]

      Dado que ID_EDIT_FIND es un comando estándar que procesa CEditView, no es necesario implementar un controlador especial para este comando.Sin embargo, debe implementar un controlador para el nuevo comando ID_EDIT_FIND_COMBO.

  2. Cree una nueva clase, CFindComboBox, derivado de CComboBox (Clase).

  3. En la clase de CFindComboBox , invalide el método virtual de PreTranslateMessage .Este método permitirá al cuadro combinado para procesar el mensaje de WM_KEYDOWN .Si el usuario presiona la tecla de escape (VK_ESCAPE), devuelva el foco a la ventana de marco principal.Si el usuario presiona la tecla ENTRAR (VK_ENTER), envía a la ventana de marco principal un mensaje de WM_COMMAND que contiene el identificador de comando de ID_EDIT_FIND_COMBO

  4. Cree una clase para el botón del cuadro combinado de Find , derivada de CMFCToolBarComboBoxButton (Clase).En este ejemplo, se llama CFindComboButton.

  5. El constructor de CMFCToolbarComboBoxButton toma tres parámetros: el identificador de comando del botón, índice de la imagen del botón, el estilo y el cuadro combinado.Establezca estos parámetros como sigue:

    1. Pase ID_EDIT_FIND_COMBO como el identificador de comando

    2. Utilice CCommandManager::GetCmdImage con ID_EDIT_FIND para obtener el índice de la imagen.

    3. Para obtener una lista de estilos disponibles en el cuadro combinado, vea Estilos de cuadro combinado.

  6. En la clase CFindComboButton, invalide el método CMFCToolbarComboBoxButton::CreateCombo.Aquí se debe crear el objeto de CFindComboButton y devolver un puntero al.

  7. Utilice la macro de IMPLEMENT_SERIAL para crear el botón combinado persistente.El administrador del área de trabajo carga automáticamente y guarda el estado del botón en el Registro de Windows.

  8. Implemente el controlador de ID_EDIT_FIND_COMBO en la vista del documento.Utilice CMFCToolBar::GetCommandButtons con ID_EDIT_FIND_COMBO para recuperar todos los botones del cuadro combinado de Find .Puede haber varias copias de un botón con el mismo identificador de comando debido a la personalización.

  9. En el controlador de mensajes OnFindde ID_EDIT_FIND, utilice CMFCToolBar::IsLastCommandFromButton de determinar si se suministra el comando de búsqueda del botón del cuadro combinado de Find .Si es así buscar texto y agregue la cadena de búsqueda en el cuadro combinado.

Bb983718.collapse_all(es-es,VS.110).gifAgregar el Control de búsqueda a la barra de herramientas de Main

Para agregar el botón del cuadro combinado en la barra de herramientas, siga estos pasos:

  1. Implemente el controlador de mensajes OnToolbarReset de AFX_WM_RESETTOOLBAR en la ventana de marco principal.

    [!NOTA]

    El marco envía este mensaje en la ventana de marco principal cuando una barra de herramientas inicializa durante el inicio de la aplicación, o cuando una barra de herramientas se restaura durante la personalización.En cualquier caso, debe reemplazar el botón de la barra de herramientas estándar con el botón personalizado del cuadro combinado de Find .

  2. En el controlador de AFX_WM_RESETTOOLBAR , examine el identificador de la barra de herramientas, es decir, WPARAM de mensajes de AFX_WM_RESETTOOLBAR .Si el identificador de la barra de herramientas es igual al de la barra de herramientas que contiene el botón del cuadro combinado de Find , llame a CMFCToolBar::ReplaceButton para reemplazar el botón de Find (es decir, el botón con el identificador ID_EDIT_FIND) de comando a un objeto de CFindComboButton .

    [!NOTA]

    Puede construir un objeto de CFindComboBox en la pila, porque ReplaceButton copia el objeto de botón y mantiene la copia.

Bb983718.collapse_all(es-es,VS.110).gifAgregar el Control de búsqueda al cuadro de diálogo personalizar

En el controlador OnViewCustomizede personalización, llamada CMFCToolBarsCustomizeDialog::ReplaceButton para reemplazar el botón de Find (es decir, el botón con el identificador ID_EDIT_FIND) de comando a un objeto de CFindComboButton .

Vea también

Referencia

Gráfico de jerarquía

CMFCToolBar (Clase)

CMFCToolBarButton (Clase)

CMFCToolBarComboBoxButton (Clase)

CMFCToolBarsCustomizeDialog (Clase)

Otros recursos

Clases de MFC