Acerca de los controles trackbar

Una barra de seguimiento es una ventana que contiene un control deslizante (a veces denominado pulgar) en un canal y marcas de graduación opcionales. Cuando el usuario mueve el control deslizante, mediante el mouse o las teclas de dirección, la barra de seguimiento envía mensajes de notificación para indicar el cambio.

Las barras de seguimiento son útiles cuando desea que el usuario seleccione un valor entero discreto sin signo o un conjunto de valores enteros sin signo consecutivos en un intervalo. Por ejemplo, puede usar una barra de seguimiento para permitir al usuario establecer la velocidad de repetición del teclado moviendo el control deslizante a una marca de graduación determinada. En la ilustración siguiente se muestra una barra de seguimiento típica.

captura de pantalla de una barra de seguimiento con etiquetas en los extremos para ralentizar y rápido

El control deslizante de una barra de seguimiento se mueve en incrementos que se especifican al crearlo. Los valores de este intervalo se conocen como unidades lógicas. Por ejemplo, si especifica que la barra de seguimiento debe tener unidades lógicas que van de 0 a 5, el control deslizante solo puede ocupar seis posiciones: una posición en el lado izquierdo de la barra de seguimiento y una posición para cada incremento del intervalo. Normalmente, cada una de estas posiciones se identifica mediante una marca de graduación; sin embargo, el número de marcas de graduación es arbitrario y puede ser menor que el número de posiciones lógicas.

Puede crear una barra de seguimiento mediante la función CreateWindowEx , especificando la clase de ventana TRACKBAR_CLASS . Después de crear una barra de seguimiento, puede usar mensajes de barra de seguimiento para establecer y recuperar muchas de sus propiedades. Los cambios que puedes realizar incluyen establecer las posiciones mínimas y máximas para el control deslizante, dibujar marcas de graduación, establecer un intervalo de selección y cambiar la posición del control deslizante.

Intervalo de selección

Si crea una barra de seguimiento con el estilo TBS_ENABLESELRANGE , puede especificar un intervalo de selección. La barra de seguimiento resalta el intervalo de selección y muestra marcas de graduación triangulares al principio y al final, como se muestra en la ilustración siguiente.

captura de pantalla de una barra de seguimiento con un intervalo resaltado

El intervalo de selección de la barra de seguimiento no afecta a su funcionalidad de ninguna manera. Es la aplicación la que implementa el intervalo. Puede hacerlo de una de las maneras siguientes:

  • Use un intervalo de selección para permitir que el usuario establezca valores máximos y mínimos para algún parámetro. Por ejemplo, el usuario podría mover el control deslizante a una posición y, a continuación, hacer clic en un botón con la etiqueta "Max". A continuación, la aplicación establece el intervalo de selección para mostrar los valores elegidos por el usuario.
  • Limite el movimiento del control deslizante a un subrango predeterminado dentro del control, controlando el WM_HSCROLL o WM_VSCROLL notificación y permitiendo cualquier movimiento fuera del intervalo de selección. Puede hacerlo, por ejemplo, si el intervalo de valores disponibles para el usuario puede cambiar debido a otras opciones que el usuario ha realizado o según los recursos disponibles.

Mensajes de la barra de seguimiento

Las unidades lógicas de una barra de seguimiento son el conjunto de valores contiguos que la barra de seguimiento puede representar. Normalmente se definen especificando el intervalo de valores posibles con un mensaje de TBM_SETRANGE tan pronto como se haya creado la barra de seguimiento. Las aplicaciones pueden modificar dinámicamente el intervalo mediante TBM_SETRANGE, TBM_SETRANGEMAX o TBM_SETRANGEMIN.

Para recuperar la posición del control deslizante (es decir, el valor elegido por el usuario), use el mensaje TBM_GETPOS . Para establecer la posición del control deslizante, use el TBM_SETPOS mensaje.

Una barra de seguimiento muestra automáticamente marcas de graduación al principio y al final, a menos que especifique el estilo TBS_NOTICKS . (En el editor de recursos de Microsoft Visual Studio, esto significa establecer la propiedad Marcas de graduación en False). Puede usar el estilo TBS_AUTOTICKS para mostrar automáticamente marcas de graduación adicionales a intervalos regulares a lo largo de la barra de seguimiento. De forma predeterminada, una TBS_AUTOTICKS barra de seguimiento muestra una marca de graduación en cada incremento del intervalo de la barra de seguimiento. Para especificar un intervalo diferente para las marcas de graduación automáticas, envíe el mensaje TBM_SETTICFREQ a la barra de seguimiento. Por ejemplo, podría usar este mensaje para mostrar solo 10 marcas de graduación en un intervalo de 1 a 100.

Para establecer la posición de una sola marca de graduación, envíe el mensaje TBM_SETTIC . Una barra de seguimiento mantiene una matriz de valores DWORD que almacena la posición de cada marca de graduación. La matriz no incluye las marcas de graduación primera y última, que la barra de seguimiento crea automáticamente. Puede especificar un índice en esta matriz al enviar el mensaje de TBM_GETTIC para recuperar la posición de la marca de graduación correspondiente. Como alternativa, puede enviar el mensaje TBM_GETPTICS para recuperar un puntero a la matriz. El número de elementos de la matriz es igual a dos menos que el recuento de tics devuelto por el mensaje TBM_GETNUMTICS . Esto se debe a que el recuento devuelto por TBM_GETNUMTICS incluye las marcas de graduación primera y última, que no se incluyen en la matriz. Para recuperar la posición física de una marca de graduación, en las coordenadas de cliente de la ventana de la barra de seguimiento, envíe el mensaje TBM_GETTICPOS . El TBM_CLEARTICS mensaje quita todas las marcas de graduación de una barra de seguimiento, excepto la primera y la última.

El tamaño de línea de una barra de seguimiento determina hasta dónde se mueve el control deslizante en respuesta a la entrada del teclado desde las teclas de dirección, como la tecla FLECHA DERECHA o FLECHA ABAJO. Para recuperar o establecer el tamaño de línea, envíe los mensajes TBM_GETLINESIZE y TBM_SETLINESIZE . La barra de seguimiento también envía el TB_LINEUP y TB_LINEDOWN códigos de notificación a su ventana primaria cuando el usuario presiona las teclas de dirección.

El tamaño de página de una barra de seguimiento determina cuánto se mueve el control deslizante en respuesta a la entrada del teclado, como la tecla PAGE UP o PAGE DOWN, o la entrada del mouse, como clics en el canal de la barra de seguimiento. Para recuperar o establecer el tamaño de página, envíe los mensajes TBM_GETPAGESIZE y TBM_SETPAGESIZE . La barra de seguimiento también envía los códigos de notificación TB_PAGEUP y TB_PAGEDOWN a su ventana primaria cuando recibe la entrada del teclado o del mouse que desplaza la página. Para obtener más información, vea Mensajes de notificación de la barra de seguimiento.

Una aplicación puede enviar mensajes para recuperar las dimensiones de una barra de seguimiento. El mensaje TBM_GETTHUMBRECT recupera el rectángulo delimitador del control deslizante. El mensaje TBM_GETTHUMBLENGTH recupera la longitud del control deslizante. El mensaje TBM_GETCHANNELRECT recupera el rectángulo delimitador del canal de la barra de seguimiento, que es el área sobre la que se mueve el control deslizante. Contiene el resaltado cuando se selecciona un intervalo. Si una barra de seguimiento tiene el estilo TBS_FIXEDLENGTH , puede enviar el mensaje TBM_SETTHUMBLENGTH para cambiar la longitud del control deslizante.

Para recuperar o establecer el intervalo de selección, envíe mensajes a la barra de seguimiento. Use el mensaje TBM_SETSEL para establecer las posiciones inicial y final de una selección. Para establecer solo la posición inicial o simplemente la posición final de una selección, envíe un mensaje de TBM_SETSELSTART o TBM_SETSELEND . Para recuperar las posiciones inicial o final de un intervalo de selección, envíe un mensaje de TBM_GETSELSTART o TBM_GETSELEND . Para borrar un intervalo de selección y restaurar la barra de seguimiento a su intervalo original, envíe el mensaje TBM_CLEARSEL .

Nota:

Es responsabilidad de la aplicación asegurarse de que el usuario no puede seleccionar valores fuera del intervalo de selección. El propio control no impide que el usuario mueva el control deslizante fuera del intervalo.

 

Mensajes de notificación de la barra de seguimiento

Una barra de seguimiento notifica a su ventana primaria de acciones de usuario enviando al elemento primario un mensaje de WM_HSCROLL o WM_VSCROLL . Una barra de seguimiento con el estilo TBS_HORZ envía mensajes WM_HSCROLL . Una barra de seguimiento con el estilo TBS_VERT envía mensajes WM_VSCROLL . La palabra de orden inferior del parámetro wParam de WM_HSCROLL o WM_VSCROLL contiene el código de notificación. Para los códigos de notificación de TB_THUMBPOSITION y TB_THUMBTRACK, la palabra de orden superior del parámetro wParam especifica la posición del control deslizante. Para todos los demás códigos de notificación, la palabra de orden superior es cero; envíe el mensaje TBM_GETPOS para determinar la posición del control deslizante. El parámetro lParam es el identificador de la barra de seguimiento.

El sistema envía los códigos de notificación TB_BOTTOM, TB_LINEDOWN, TB_LINEUP y TB_TOP solo cuando el usuario interactúa con una barra de seguimiento mediante el teclado. Los códigos de notificación TB_THUMBPOSITION y TB_THUMBTRACK solo se envían cuando el usuario usa el mouse. Los códigos de notificación TB_ENDTRACK, TB_PAGEDOWN y TB_PAGEUP se envían en ambos casos. En la tabla siguiente se enumeran los códigos de notificación de la barra de seguimiento y los eventos (códigos de clave virtual o eventos del mouse) que hacen que se envíen las notificaciones códigos de clave virtual.

Código de notificación Motivo enviado
TB_BOTTOM VK_END
TB_ENDTRACK WM_KEYUP (el usuario publicó una clave que envió un código de clave virtual pertinente)
TB_LINEDOWN VK_RIGHT o VK_DOWN
TB_LINEUP VK_LEFT o VK_UP
TB_PAGEDOWN VK_NEXT (el usuario ha clic en el canal debajo o a la derecha del control deslizante).
TB_PAGEUP VK_PRIOR (el usuario ha clic en el canal situado encima o a la izquierda del control deslizante)
TB_THUMBPOSITION WM_LBUTTONUP después de un código de notificación de TB_THUMBTRACK
TB_THUMBTRACK Movimiento del control deslizante (el usuario arrastró el control deslizante)
TB_TOP VK_HOME

 

Procesamiento predeterminado de mensajes de la barra de seguimiento

En esta sección se describe el procesamiento de mensajes de ventana realizado por una barra de seguimiento.

Message Procesamiento realizado
WM_CAPTURECHANGED Elimina el temporizador si se estableció durante WM_LBUTTONDOWN procesamiento y envía el código de notificación de TB_THUMBPOSITION, si es necesario. Siempre envía el código de notificación TB_ENDTRACK.
WM_CREATE Realiza una inicialización adicional, como establecer el tamaño de línea, el tamaño de página y la frecuencia de marca de graduación en los valores predeterminados.
WM_DESTROY Libera recursos.
WM_ENABLE Vuelve a pintar la ventana de la barra de seguimiento.
WM_ERASEBKGND Borra el fondo de la ventana con el color de fondo actual de la barra de seguimiento.
WM_GETDLGCODE Devuelve el valor DLGC_WANTARROWS.
WM_KEYDOWN Procesa las claves de dirección y envía los códigos de notificación TB_TOP, TB_BOTTOM, TB_PAGEUP, TB_PAGEDOWN, TB_LINEUP y TB_LINEDOWN, según corresponda.
WM_KEYUP Envía el código de notificación TB_ENDTRACK si la clave era una de las claves de dirección.
WM_KILLFOCUS Vuelve a pintar la ventana de la barra de seguimiento.
WM_LBUTTONDOWN Establece el foco y la captura del mouse en la barra de seguimiento. Cuando sea necesario, establece un temporizador que determina la rapidez con la que el control deslizante se mueve hacia el cursor del mouse cuando el usuario mantiene presionado el botón del mouse en la ventana.
WM_LBUTTONUP Libera la captura del mouse y finaliza el temporizador si se estableció uno durante WM_LBUTTONDOWN procesamiento. Envía el código de notificación TB_THUMBPOSITION, si es necesario. Siempre envía el código de notificación TB_ENDTRACK.
WM_MOUSEMOVE Mueve el control deslizante y envía el código de notificación TB_THUMBTRACK al realizar el seguimiento del mouse (consulte WM_TIMER).
WM_PAINT Pinta la barra de pistas. Si el parámetro wParam no es NULL, el control asume que el valor es un HDC y pinta mediante ese contexto de dispositivo.
WM_SETFOCUS Vuelve a pintar la ventana de la barra de seguimiento.
WM_SIZE Establece las dimensiones de la barra de seguimiento, quitando el control deslizante si no hay suficiente espacio para mostrarlo.
WM_TIMER Recupera la posición del mouse y actualiza la posición del control deslizante. (Solo se recibe cuando el usuario arrastra el control deslizante).
WM_WININICHANGE Inicializa las dimensiones del control deslizante.

 

Información sobre herramientas de la barra de seguimiento

Una barra de seguimiento que se crea con el estilo TBS_TOOLTIPS tiene un control de información sobre herramientas predeterminado. La información sobre herramientas permanece visible y muestra el valor actual cuando el usuario arrastra el control deslizante mediante el mouse.

Puede asignar un nuevo control de información sobre herramientas a una barra de seguimiento enviando el mensaje TBM_SETTOOLTIPS . Para recuperar el identificador de un control de información sobre herramientas asignado, use el mensaje TBM_GETTOOLTIPS .