Compartir a través de


Tutorial: Colocar controles en las barras de herramientas

En este artículo se describe cómo agregar un botón de barra de herramientas que contiene un control de Windows a una barra de herramientas. En MFC, un botón de barra de herramientas debe ser una CMFCToolBarButtonclase derivada de clase, por ejemplo CMFCToolBarComboBoxButton Clase, CMFCToolBarEditBoxButton Clase, CMFCDropDownToolbarButton Clase o CMFCToolBarMenuButton Clase.

Agregar controles a barras de herramientas

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

  1. Reserve un identificador 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 barras de herramientas en Visual Studio, consulte el artículo Editor de barras de herramientas .

  2. Reserve una imagen de barra de herramientas (icono de botón) para el botón en todos los mapas de bits de la barra de herramientas primaria.

  3. En el controlador de mensajes que procesa el AFX_WM_RESETTOOLBAR mensaje, realice los pasos siguientes:

    1. Construya el control de botón mediante una CMFCToolbarButtonclase derivada de .

    2. Reemplace el botón ficticio por el nuevo control mediante CMFCToolBar::ReplaceButton. Puede construir el objeto de botón en la pila, ya que ReplaceButton copia el objeto de botón y mantiene la copia.

Nota:

Si ha habilitado la personalización en la aplicación, es posible que tenga que restablecer la barra de herramientas mediante el botón Restablecer de 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 ejecutar el método durante el inicio de la ReplaceButton 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án disponibles en la aplicación. De forma predeterminada, el cuadro de diálogo Personalizar procesa los menús de la aplicación y crea una lista de botones de barra de herramientas estándar en cada categoría de menú. Para mantener la funcionalidad extendida que proporcionan los controles de la barra de herramientas, 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 OnViewCustomize de personalización mediante la CMFCToolBarsCustomizeDialog clase Class . Antes de mostrar el cuadro de diálogo Personalizar llamando CMFCToolBarsCustomizeDialog::Createa , llame CMFCToolBarsCustomizeDialog::ReplaceButton a para reemplazar el botón estándar por el nuevo control.

Ejemplo: Crear un cuadro combinado buscar

En esta sección se describe cómo crear un control buscar cuadro combinado que aparece en una barra de herramientas y contiene cadenas de búsqueda usadas recientemente. El usuario puede escribir una cadena en el control y, a continuación, presionar la tecla ENTRAR para buscar en un documento o presionar la tecla de escape para devolver el foco al marco principal. En este ejemplo se supone que el documento se muestra en una vista derivada de claseCEditView.

Crear el control De búsqueda

En primer lugar, cree el control Buscar cuadro combinado:

  1. Agregue el botón y sus comandos a los recursos de la aplicación:

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

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

    3. Agregue una nueva cadena a la tabla de "Find the text\nFind" cadenas y asígnele un ID_EDIT_FIND_COMBO identificador de comando. Este identificador se usará como identificador de comando del botón Buscar cuadro combinado.

      Nota:

      Dado ID_EDIT_FIND que es un comando estándar procesado por 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, derivada de CComboBox Class.

  3. En la CFindComboBox clase , invalide el PreTranslateMessage método virtual. Este método habilitará el cuadro combinado para procesar el WM_KEYDOWN mensaje. Si el usuario alcanza la tecla de escape (VK_ESCAPE), devuelva el foco a la ventana principal del marco. Si el usuario alcanza la tecla Entrar (VK_ENTER), publique en la ventana de marco principal un WM_COMMAND mensaje que contenga el identificador de ID_EDIT_FIND_COMBO comando.

  4. Cree una clase para el botón Buscar cuadro combinado, derivado de CMFCToolBarComboBoxButton Clase. En este ejemplo, se denomina CFindComboButton.

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

    1. Pase como ID_EDIT_FIND_COMBO identificador de comando.

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

    3. Para obtener una lista de los estilos de cuadro combinado disponibles, consulte Combo-Box Estilos.

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

  7. Use la IMPLEMENT_SERIAL macro para 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.

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

  9. En el controlador OnFindde ID_EDIT_FIND mensajes , use CMFCToolBar::IsLastCommandFromButton para determinar si el comando find se envió desde el botón Buscar cuadro combinado. 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 cuadro combinado a la barra de herramientas, siga estos pasos:

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

    Nota:

    El marco envía este mensaje a la ventana de marco principal cuando se inicializa una barra de herramientas durante el inicio de la aplicación o cuando se restablece 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 de cuadro combinado Buscar personalizado.

  2. En el AFX_WM_RESETTOOLBAR controlador, examine el identificador de la barra de herramientas, es decir, el WPARAMAFX_WM_RESETTOOLBAR del mensaje. Si el identificador de la barra de herramientas es igual al de la barra de herramientas que contiene el botón Buscar cuadro combinado, llame CMFCToolBar::ReplaceButton a para reemplazar el botón Buscar (es decir, el botón por el identificador ID_EDIT_FINDde comando ) por un CFindComboButton objeto .

    Nota:

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

Agregar el control Buscar al cuadro de diálogo Personalizar

En el controlador OnViewCustomizede personalización , llame CMFCToolBarsCustomizeDialog::ReplaceButton a para reemplazar el botón Buscar (es decir, el botón por el identificador ID_EDIT_FINDde comando ) por un CFindComboButton objeto .

Consulte también

Gráfico de jerarquías
Clases
CMFCToolBar (clase)
CMFCToolBarButton (clase)
CMFCToolBarComboBoxButton (clase)
CMFCToolBarsCustomizeDialog (clase)