Compartir por


Barras de herramientas de acoplamiento y flotantes

La biblioteca MFC (Microsoft Foundation Class) admite barras de herramientas acoplables. Una barra de herramientas acoplable se puede adjuntar, o acoplar, a cualquier lado de su ventana primaria, o puede desasociarse o flotar en su propia ventana minimarco. En este artículo se explica cómo usar barras de herramientas acoplables en las aplicaciones.

Si usa el Asistente para aplicaciones para generar el esqueleto de la aplicación, se le pedirá que elija si quiere barras de herramientas acoplables. De forma predeterminada, el Asistente para aplicaciones genera el código que realiza las tres acciones necesarias para colocar una barra de herramientas acoplable en la aplicación:

Si falta alguno de estos pasos, la aplicación muestra una barra de herramientas estándar. Los dos últimos pasos se deben realizar para cada barra de herramientas acoplable de la aplicación.

En este artículo se tratan otros temas:

Consulte el ejemplo general de MFC DOCKTOOL.

Habilitación del acoplamiento en una ventana de marco

Para acoplar barras de herramientas a una ventana de marco, la ventana de marco (o destino) debe estar habilitada para permitir el acoplamiento. Esto se hace mediante la función CFrameWnd::EnableDocking, que toma un parámetro DWORD, que es un conjunto de bits de estilo que indica qué lado de la ventana de marco acepta acoplamiento. Si una barra de herramientas está a punto de acoplarse y hay varios lados a los que se podría acoplar, los lados indicados en el parámetro pasado a EnableDocking se usan en el orden siguiente: arriba, abajo, izquierda, derecha. Si desea poder acoplar barras de controles en cualquier lugar, pase CBRS_ALIGN_ANY a EnableDocking.

Habilitación del acoplamiento de una barra de herramientas

Una vez que haya preparado el destino para acoplar, debe preparar la barra de herramientas (o el origen) de forma similar. Llame a CControlBar::EnableDocking para cada barra de herramientas que quiera acoplar y especifique los lados de destino a los que debe acoplarse la barra de herramientas. Si ninguno de los lados especificados en la llamada a CControlBar::EnableDockingcoincide con los lados habilitados para acoplar en la ventana de marco, la barra de herramientas no podrá acoplarse y flotará. Una vez que esté flotando, permanecerá así y no se podrá acoplar a la ventana de marco.

Si el efecto que desea es una barra de herramientas flotante permanentemente, llame a EnableDocking con un parámetro de 0. A continuación, llame a CFrameWnd::FloatControlBar. La barra de herramientas permanece flotante y no se puede acoplar en ningún lugar.

Acoplamiento de la barra de herramientas

El marco llama a CFrameWnd::DockControlBar cuando el usuario intenta colocar la barra de herramientas en un lado de la ventana de marco que permita acoplar.

Además, puede llamar a esta función en cualquier momento para acoplar barras de control a la ventana de marco. Normalmente, esto se hace durante la inicialización. Se puede acoplar más de una barra de herramientas a un lado determinado de la ventana de marco.

Hacer flotante la barra de herramientas

Al desasociar una barra de herramientas acoplable de la ventana de marco se hace flotante la barra de herramientas. Llame a CFrameWnd::FloatControlBar para hacerlo. Especifique la barra de herramientas que se va a hacer flotante, el punto donde se debe colocar y un estilo de alineación que determine si la barra de herramientas flotante es horizontal o vertical.

El marco llama a esta función cuando un usuario arrastra una barra de herramientas fuera de su ubicación acoplada y la coloca en una ubicación donde el acoplamiento no está habilitado. Puede estar en cualquier lugar dentro o fuera de la ventana de marco. Al igual que con DockControlBar, también puede llamar a esta función durante la inicialización.

La implementación de MFC de barras de herramientas acoplables no proporciona algunas de las características ampliadas que se encuentran en algunas aplicaciones que admiten barras de herramientas acoplables. No se proporcionan características como barras de herramientas personalizables.

Cambio de tamaño dinámico de la barra de herramientas

A partir de la versión 4.0 de Visual C++, puede hacer posible que los usuarios de la aplicación cambien el tamaño de las barras de herramientas flotantes dinámicamente. Normalmente, una barra de herramientas tiene una forma larga y lineal, mostrada horizontalmente. Pero puede cambiar la orientación de la barra de herramientas y su forma. Por ejemplo, cuando el usuario acopla una barra de herramientas en uno de los lados verticales de la ventana de marco, la forma cambia a un diseño vertical. También es posible volver a configurar la barra de herramientas en un rectángulo con varias filas de botones.

Puede:

  • Especificar el dimensionamiento dinámico como una característica de la barra de herramientas.

  • Especificar el dimensionamiento fijo como una característica de la barra de herramientas.

Para proporcionar esta compatibilidad, hay dos nuevos estilos de barra de herramientas para su uso en las llamadas a la función miembro CToolBar::Create. Son las siguientes:

  • La barra de control CBRS_SIZE_DYNAMIC es dinámica.

  • La barra de control CBRS_SIZE_FIXED es fija.

El estilo de tamaño dinámico permite al usuario cambiar el tamaño de la barra de herramientas mientras está flotando, pero no mientras está acoplada. La barra de herramientas "se ajusta" cuando es necesario cambiar la forma a medida que el usuario arrastra sus bordes.

El estilo de tamaño fijo conserva los estados de ajuste de una barra de herramientas, fijando la posición de los botones en cada columna. El usuario de la aplicación no puede cambiar la forma de la barra de herramientas. La barra de herramientas se ajusta en lugares designados, como las ubicaciones de los separadores entre los botones. Mantiene esta forma si la barra de herramientas está acoplada o flotando. El efecto es una paleta fija con varias columnas de botones.

También puede usar CToolBar::GetButtonStyle para recuperar el estado y estilo de los botones de las barras de herramientas. El estilo de un botón determina el aspecto del botón y cómo responde a la entrada de usuario; el estado indica si el botón está en un estado ajustado.

Establecer posiciones de ajuste en una barra de herramientas de estilo fijo

Para una barra de herramientas con estilo de tamaño fijo, designe los índices del botón de la barra de herramientas en los que se ajustará la barra de herramientas. En el código siguiente se muestra cómo hacerlo en la invalidación OnCreate de la ventana de marco principal:

// Get the style of the first button separator
UINT nStyle = m_wndToolBar.GetButtonStyle(3);
// Augment the state for wrapping
nStyle |= TBBS_WRAPPED;
m_wndToolBar.SetButtonStyle(3, nStyle);

// Do the same for other wrap locations ...

// Set the bar style to size fixed
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
   CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);

// Call docking/floating functions as needed ...

El ejemplo general de MFC DOCKTOOL muestra cómo usar funciones miembro de las clases CControlBar y CToolBar para administrar el diseño dinámico de una barra de herramientas. Vea el archivo EDITBAR.CPP en DOCKTOOL.

Qué más quieres saber

Consulte también

Implementación de barra de herramientas de MFC