TN031: Barras de controles
[!NOTA]
La nota técnica siguiente no se ha actualizado desde que primero incluida en la documentación en línea.Como resultado, algunos procedimientos y temas podrían estar obsoletas o incorrectos.Para obtener la información más reciente, se recomienda busca el tema de interés en el índice de la documentación en línea.
Esta nota describe las clases de barra de control en MFC: el general CControlBar, CStatusBar, CToolBar, CDialogBar, y CDockBar.
CControlBar
ControlBar es CWnd- clase derivada que:
Está alineado al principio o final de una ventana de marco.
Puede contener elementos secundarios que están en los controles basados en indicadores HWND (por ejemplo, CDialogBar) o elementos basándoseHWND que no son de (por ejemplo, CToolBar, CStatusBar).
Las barras de control admiten estilos adicionales:
Terminal deCBRS_TOP (valor predeterminado de El) la barra de control a la parte superior.
Terminal deCBRS_BOTTOM barra de control a la parte inferior.
CBRS_NOALIGN no coloca la barra de control de nuevo al elemento primario cambia su tamaño.
Las clases derivadas de CControlBar proporcionan implementaciones más interesantes:
La barra de estado deCStatusBarA, elementos es paneles de barra de estado que contienen texto.
La barra de herramientas deCToolBarA, elementos es botones bitmap alineado en una fila.
CDialogBar A barra de herramientas-como el cuadro que contiene los controles estándar de ventanas (creados de un recurso de plantilla de cuadro de diálogo).
CDockBar A generalizó acoplar el área para otros objetos derivados de CControlBar .El miembro específico funciona y variables disponibles en esta clase cambien en versiones futuras.
Todos los objetos o ventanas de barra de control se ventanas secundarias de alguna ventana de marco principal.Se suelen agregar como un elemento relacionado al área cliente del marco (por ejemplo, un cliente MDI o vista).El identificador de ventana secundaria de una barra de controles es importante.El diseño predeterminado de barra de control sólo funciona para las barras de controles con id. en el intervalo de AFX_IDW_CONTROLBAR_FIRST a AFX_IDW_CONTROLBAR_LAST.Observe que aunque hay un intervalo de los id. de 256 barras de controles, los primeros 32 de estos id. de la barra de control son especiales ya que admite directamente en la arquitectura de la vista previa de impresión.
La clase de CControlBar proporciona la implementación estándar para:
Alinear la barra de control a la parte superior, inferior, o a cualquier lado del marco.
Asignar matrices del elemento del control.
Admitir la implementación de clases derivadas.
Los objetos de la barra de control de C++ se insertarán normalmente como miembros de una clase derivada de CFrameWnd , y limpiados cuando se destruyen HWND y el objeto primario.Si necesita asignar un objeto de barra de control en la pila, puede establecer simplemente el miembro de m_bAutoDestruct a TRUE para crear la barra de control “delete this” cuando se destruye HWND .
[!NOTA]
Si crea su propio CControlBar- clase derivada, en lugar de utilizar una de las clases derivadas de MFC, como CStatusBar, CToolBar, o CDialogBar, deberá establecer el miembro de datos de m_dwStyle .Esto se puede hacer en la invalidación de Create:
// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create( CWnd* pParentWnd, DWORD dwStyle, UINT nID )
{
m_dwStyle = dwStyle;
.
.
.
}
Algoritmo del diseño de la barra de control
El algoritmo del diseño de la barra de control es muy simple.La ventana de marco envía un mensaje WM_SIZEPARENT a todos los elementos secundarios del intervalo de la barra de control.Junto con este mensaje, un puntero al rectángulo del elemento primario se pasa.Este mensaje se envía a los elementos secundarios en orden Z.Los elementos secundarios de la barra de controles utilizan esta información para colocarse y reducir el tamaño del área cliente del elemento primario.El último rectángulo que se permite al área cliente normal (menos barras de control) se utiliza para colocar la ventana principal del cliente (normalmente cliente MDI, una vista o una ventana divisora).
Vea CWnd::RepositionBars y CFrameWnd::RecalcLayout para más detalles.
Los mensajes privados de MFC Windows, incluidas WM_SIZEPARENT, se documentan en nota técnica 24.
CStatusBar
Una barra de estado es una barra de controles que tiene una fila de paneles de resultados de texto.Hay dos formas comunes de utilizar paneles de salida de texto:
Como línea de mensajes
(por ejemplo, la línea de mensajes estándar de ayuda del menú).Éstos son acceso normalmente por 0 indizado basada
Como indicadores de estado
(por ejemplo, los marcadores de la LOCK, de la NUM y de SCRL).Éstos son acceso normalmente por el identificador de cadena/comando
La fuente de la barra de estado es de 10 puntos MS Sans Serif (dicta la guía del diseño de aplicaciones de la interfaz de Windows o coinciden con los asignadores de fuente la mejor de una fuente proporcionalmente suiza de 10 puntos).En algunas versiones de Windows, como la edición en japonés, fuentes seleccionado son diferentes.
Los colores utilizados en la barra de estado también son coherentes con la recomendación de la guía del diseño de aplicaciones de la interfaz de Windows.Estos colores no está incluido duro y se cambia dinámicamente en respuesta a la personalización del usuario en el Panel de control.
Elemento |
Valor de color de Windows |
RGB predeterminado |
---|---|---|
El fondo de la barra de estado |
COLOR_BTNFACE |
RGB (192, 192, 192) |
Texto de la barra de estado |
COLOR_BTNTEXT |
RGB (000, 000, 000) |
Parte superior/bordes izquierdo de la barra de estado |
COLOR_BTNHIGHLIGHT |
RGB (255, 255, 255) |
Bot/bordes derecho de la barra de estado |
COLOR_BTNSHADOW |
RGB (128, 128, 128) |
Compatibilidad de CCmdUI para CStatusBar
La manera en que los marcadores se actualizan normalmente a través del mecanismo de ON_UPDATE_COMMAND_UI .El tiempo de inactividad, la barra de estado llamará al controlador de ON_UPDATE_COMMAND_UI con el identificador de cadena del panel del indicador.
El controlador de ON_UPDATE_COMMAND_UI puede llamar a:
Habilitar: para habilitar o deshabilitar el panel.Un panel disabled busca exactamente como un panel habilitado pero el texto no es visible (es decir, se desactiva el marcador de texto).
SetText: para cambiar el texto.Tenga cuidado si utiliza porque automáticamente el panel no cambie de tamaño.
Consulte la clase CStatusBar en la referencia de la biblioteca de clases para obtener más información sobre la creación y personalización API de CStatusBar .La mayoría de personalización barras de estado se debe hacer antes de que la barra de estado inicialmente se cree visible.
La barra de estado sólo admite un panel elástico, normalmente el primer panel.El tamaño de ese panel es realmente un tamaño mínimo.Si la barra de estado es mayor que el tamaño mínimo de todos los paneles, cualquier ancho adicional se dado al panel elástico.La aplicación predeterminada con una barra de estado tiene marcadores alineado a la derecha para la LOCK, la NUM y SCRL porque el primer panel es elástico.
CToolBar
Una barra de herramientas es una barra de controles con una fila de botones bitmap que pueden incluir los separadores.Dos estilos de botones son compatibles: pulsadores y botones de la casilla.La funcionalidad de radio del grupo se puede compilar con los botones y ON_UPDATE_COMMAND_UIde la casilla.
Todos los botones bitmap en la barra de herramientas se toman en un mapa de bits.Este mapa de bits debe contener un imagen o glifo de cada botón.Normalmente el orden de las imágenes/de glifos en el mapa de bits es el mismo orden que dibujarse en la pantalla.(Esto se puede cambiar mediante la personalización API.)
Cada botón debe tener el mismo tamaño.El valor predeterminado es los píxeles del estándar 24x22.Cada imagen/glifo debe ser del mismo taman-o y debe estar en paralelo en el mapa de bits.La imagen y el tamaño predeterminados de glifo es los píxeles 16x15.Por consiguiente, para una barra de herramientas con 10 botones (utilizando tamaños estándar), necesita un mapa de bits de 160 píxeles de ancho y 15 píxeles de alto.
Cada botón tiene solo un image/glifo.Se representan las diferentes estados y estilos de botón (por ejemplo, presionado, hacia arriba, abajo, de deshabilitado, deshabilitado siguiente, indeterminado) de algoritmos de esa un image/glifo.Un mapa de bits colores o DIB se puede utilizar en teoría.El algoritmo para generar los diferentes estados de botón funciona mejor si la imagen original es tonos de gris.Vea los botones de la barra de herramientas estándar e imágenes prediseñadas del botón de la barra de herramientas proporcionados en el ejemplo CLIPART MFC General para los ejemplos.
Los colores utilizados en la barra de herramientas también son coherentes con la recomendación de la guía del diseño de aplicaciones de la interfaz de Windows.Estos colores no está incluido duro y se cambia dinámicamente en respuesta a la personalización del usuario en el Panel de control.
Elemento |
Valor de color de Windows |
RGB predeterminado |
---|---|---|
El fondo de la barra de herramientas |
COLOR_BTNFACE |
RGB (192.192.192) |
Parte superior/bordes izquierdo de los botones de la barra de herramientas |
COLOR_BTNHIGHLIGHT |
RGB (255.255.255) |
Bot/bordes derecho de los botones de la barra de herramientas |
COLOR_BTNSHADOW |
RGB (128.128.128) |
Además, se vuelven a aplicar color a los botones del mapa de bits de la barra de herramientas como si estuvieran controles de botón estándar de Windows.Esto que cambia de color se produce cuando el mapa de bits se carga de recursos y en respuesta a un cambio en colores del sistema en respuesta a la personalización del usuario en el Panel de control.Los colores siguientes en un mapa de bits de la barra de herramientas se volvió a colorears automáticamente por lo que deben utilizarse con precaución.Si no desea tener una parte del mapa de bits cambia de color, utilice el color que aproximado de por uno de los valores asignados RGB.La asignación se realiza según los valores exactos RGB.
Valor RGB |
Valor de color asignados dinámicamente |
---|---|
RGB (000, 000, 000) |
COLOR_BTNTEXT |
RGB (128, 128, 128) |
COLOR_BTNSHADOW |
RGB (192, 192, 192) |
COLOR_BTNFACE |
RGB (255, 255, 255) |
COLOR_BTNHIGHLIGHT |
Consulte la clase CToolBarla referencia de la biblioteca de clases para obtener más información sobre la creación y personalización API de CToolBar .La mayoría de personalización de barras de herramientas deben realizarse antes de que la barra de herramientas inicialmente se cree visible.
La personalización API se puede utilizar para ajustar los id. del botón, estilos, ancho de separación y que la imagen o el glifo se utiliza para el botón.De forma predeterminada no necesita utilizar estas API.
Compatibilidad de CCmdUI para CToolBar
La manera en que los botones de la barra de herramientas se actualizan siempre a través del mecanismo de ON_UPDATE_COMMAND_UI .El tiempo de inactividad, la barra de herramientas llamará al controlador de ON_UPDATE_COMMAND_UI con el identificador de comando del botón.ON_UPDATE_COMMAND_UI no se denomina para separadores, pero se llama para los pulsadores y botones de casilla.
El controlador de ON_UPDATE_COMMAND_UI puede llamar a:
Habilitar: para habilitar o deshabilitar el botón.Esto funciona igual para los pulsadores y botones de casilla.
SetCheck: Para establecer el estado de la comprobación de un botón.Llamando a esto para un botón de la barra de herramientas se activará en un botón de la casilla.SetCheck toma un parámetro que puede ser 0 (no comprobada), 1 (activada) o 2 (indeterminado)
SetRadio: Abreviada para SetCheck.
Botones de casilla son botones “AUTOS” checkbox; es decir, cuando el usuario los presiona inmediatamente cambiarán el estado.Checked es el control o el estado presionado.No hay ninguna manera integrada de la interfaz de usuario de cambiar un botón en el estado “indeterminada”; que debe realizar con código.
La personalización API le permitirá cambie el estado de un botón de la barra de herramientas determinado, debe cambiar preferentemente a estos estados en el controlador de ON_UPDATE_COMMAND_UI para el comando que el botón de la barra de herramientas representa.Recuerde, el procesamiento inactivo cambiará el estado de botones de la barra de herramientas con el controlador de ON_UPDATE_COMMAND_UI , por lo que cualquier cambio a estos estados creadas con SetButtonStyle puede perder después de la inactivo siguiente.
Los botones de la barra de herramientas envían los mensajes de WM_COMMAND como botones normales o los elementos de menú y son administrados normalmente por un controlador de ON_COMMAND en la misma clase que proporciona el controlador de ON_UPDATE_COMMAND_UI .
Hay cuatro estilos del botón de la barra de herramientas (configuración de TBBS_) utilizados para los estados de presentación:
TBBS_CHECKED: La casilla se activa actualmente (siguiente).
TBBS_INDETERMINATE: La casilla está actualmente indeterminado.
TBBS_DISABLED: El botón está deshabilitada actualmente.
TBBS_PRESSED: el botón se presiona actualmente.
Los seis estilos de botón de guía de diseñar aplicaciones de la interfaz de Windows oficial de se representan mediante los siguientes valores de TBBS:
Encima de = 0
El mouse = TBBS_PRESSED (| cualquier otro estilo)
Deshabilitado = TBBS_DISABLED
Abajo = TBBS_CHECKED
Abajo deshabilitado = TBBS_CHECKED | TBBS_DISABLED
Indeterminado = TBBS_INDETERMINATE
CDialogBar
Una barra de cuadro diálogo es una barra de control que contiene los controles estándar de Windows.Actúa como un diálogo en que contiene controles y admite la tabulación entre ellos.También actúa como un diálogo en que usa una plantilla de cuadro de diálogo para representar la barra.
CDialogBar se utiliza para la barra de herramientas de la vista previa de impresión, que contiene controles de mismo botón estándar.
Mediante CDialogBar es como usar CFormView.Debe definir una plantilla de cuadro de diálogo para la barra de cuadro de diálogo y quitar todos los estilos excepto WS_CHILD.Observe que el diálogo no debería estar visible.
Las notificaciones del control para CDialogBar se enviarán al elemento primario de la barra de control (como los botones de la barra de herramientas).
Compatibilidad de CCmdUI para CDialogBar
Los botones de la barra de cuadro de diálogo se deben actualizar a través del mecanismo de controlador de ON_UPDATE_COMMAND_UI .En el tiempo de inactividad, la barra de cuadro diálogo llamará al controlador de ON_UPDATE_COMMAND_UI con el identificador de comando de todos los botones que tienen un >= 0x8000 ID (es decir, en el intervalo de id. de comando).
El controlador de ON_UPDATE_COMMAND_UI puede llamar a:
Permiso: para habilitar o deshabilitar el botón.
SetText: para cambiar el texto del botón.
La personalización puede realizarse mediante el administrador de ventana estándar API.