Partilhar via


Sobre os controles da barra de trilha

Uma barra de deslocamento é um componente de interface de utilizador que contém um botão deslizante num canal e marcas de escala opcionais. Quando o usuário move o controle deslizante, usando o mouse ou as teclas de direção, a barra de controle envia mensagens de notificação para indicar a alteração.

As barras de deslocamento são úteis quando se deseja que o utilizador selecione um valor inteiro não assinado discreto ou um conjunto de valores inteiros não assinados consecutivos dentro de um intervalo. Por exemplo, você pode usar uma barra de faixas para permitir que o usuário defina a taxa de repetição do teclado movendo o controle deslizante para uma determinada marca de seleção. A ilustração a seguir mostra uma barra deslizante típica.

captura de ecrã de uma barra de deslize com etiquetas nas extremidades para lento e rápido

O controle deslizante em uma barra de controle se move em incrementos que você especifica ao criá-lo. Os valores neste intervalo são referidos como unidades lógicas. Por exemplo, se se especificar que a barra de progressão deve ter unidades lógicas que variam de 0 a 5, o cursor pode ocupar apenas seis posições: uma posição à esquerda da barra e uma posição para cada incremento no intervalo. Normalmente, cada uma dessas posições é identificada por uma marca de tique; no entanto, o número de marcas de tique é arbitrário e pode ser menor do que o número de posições lógicas.

Você cria uma barra de controle usando a funçãoCreateWindowEx, especificando a classe TRACKBAR_CLASS window. Depois de criar uma barra de deslocamento, pode usar mensagens da barra de deslocamento para definir e recuperar muitas das suas propriedades. As alterações que você pode fazer incluem definir as posições mínima e máxima para o controle deslizante, desenhar marcas de escala, definir um intervalo de seleção e reposicionar o controle deslizante.

Intervalo de seleção

Se você criar uma barra de faixas com o estilo TBS_ENABLESELRANGE, poderá especificar um intervalo de seleção. A barra de deslocamento destaca o intervalo de seleção e exibe marcas de escala triangulares no início e no fim, conforme mostrado na ilustração a seguir.

captura de ecrã de uma barra deslizante com um intervalo realçado

O intervalo de seleção da barra de controle não afeta a sua funcionalidade de qualquer maneira. Cabe ao aplicativo implementar o intervalo. Você pode fazer isso de uma das seguintes maneiras:

  • Use um intervalo de seleção para permitir que o usuário defina valores máximos e mínimos para algum parâmetro. Por exemplo, o usuário pode mover o controle deslizante para uma posição e, em seguida, clicar em um botão rotulado "Max". Em seguida, o aplicativo define o intervalo de seleção para mostrar os valores escolhidos pelo usuário.
  • Limite o movimento do controle deslizante a um subintervalo predeterminado dentro do controle, manipulando a notificação WM_HSCROLL ou WM_VSCROLL e não permitindo qualquer movimento fora do intervalo de seleção. Você pode fazer isso, por exemplo, se o intervalo de valores disponíveis para o usuário pode mudar devido a outras escolhas que o usuário fez, ou de acordo com os recursos disponíveis.

Mensagens da barra deslizante

As unidades lógicas de uma barra de faixas são o conjunto de valores contíguos que a barra de faixas pode representar. Eles geralmente são definidos especificando o intervalo de valores possíveis com uma mensagem de TBM_SETRANGE assim que a barra de deslocamento é criada. Os aplicativos podem alterar dinamicamente o intervalo usando TBM_SETRANGE, TBM_SETRANGEMAXou TBM_SETRANGEMIN.

Para recuperar a posição do controle deslizante (ou seja, o valor que o usuário escolheu), use a mensagem TBM_GETPOS. Para definir a posição do controle deslizante, use a mensagem TBM_SETPOS.

Uma barra deslizante exibe automaticamente marcas de escala no início e no fim, a menos que se especifique o estilo TBS_NOTICKS. (No editor de recursos do Microsoft Visual Studio, isso significa definir a propriedade Tick Marks como Falso.) Pode usar o estilo TBS_AUTOTICKS para exibir automaticamente marcas de escala adicionais em intervalos regulares ao longo da barra deslizante. Por padrão, uma barra de trilha TBS_AUTOTICKS exibe uma marca de escala em cada incremento do intervalo da barra de faixa. Para especificar um intervalo diferente para as marcas de escala automáticas, envie a mensagem TBM_SETTICFREQ para a barra de faixas. Por exemplo, pode usar esta mensagem para exibir apenas 10 marcas num intervalo de 1 a 100.

Para definir a posição de uma única marca de verificação, envie a TBM_SETTIC mensagem. Uma barra de controle mantém uma matriz de valores DWORD que armazena a posição de cada marca de escala. A matriz não inclui a primeira e a última marcas de verificação, que a barra de faixas cria automaticamente. Você pode especificar um índice nessa matriz ao enviar a mensagem TBM_GETTIC para recuperar a posição da marca de escala correspondente. Como alternativa, pode enviar a mensagem TBM_GETPTICS para recuperar um ponteiro para a matriz. O número de elementos na matriz é igual a dois a menos do que a contagem de ticks retornada pela mensagem TBM_GETNUMTICS. Isso ocorre porque a contagem retornada por TBM_GETNUMTICS inclui a primeira e a última marcas de escala, que não estão incluídas na matriz. Para recuperar a posição física de uma marca de verificação, nas coordenadas do cliente da janela da barra de faixa, envie a mensagem TBM_GETTICPOS. A mensagem TBM_CLEARTICS remove todas, exceto a primeira e a última das marcas de escala de uma barra de controle deslizante.

O tamanho da linha de uma barra de rolagem determina a distância que o slider se move em resposta às teclas de seta do teclado, como SETA PARA A DIREITA ou SETA PARA BAIXO. Para recuperar ou definir o tamanho da linha, envie as mensagens TBM_GETLINESIZE e TBM_SETLINESIZE. A barra de deslocamento também envia os códigos de notificação TB_LINEUP e TB_LINEDOWN para a sua janela principal quando o utilizador pressiona as teclas de seta.

O tamanho da página de uma barra de rolagem determina até onde o controle deslizante se move em resposta a comandos do teclado, como a tecla PAGE UP ou PAGE DOWN, ou a comandos do rato, como cliques no trilho da barra de rolagem. Para recuperar ou definir o tamanho da página, envie as TBM_GETPAGESIZE e TBM_SETPAGESIZE mensagens. A barra de deslize também envia as notificações TB_PAGEUP e TB_PAGEDOWN para a janela pai quando recebe entrada do teclado ou mouse para rolar a página. Para obter mais informações, consulte Mensagens de notificação da barra de controle.

Uma aplicação pode enviar mensagens para recuperar as dimensões de um trackbar. A mensagem TBM_GETTHUMBRECT recupera o retângulo delimitador do controle deslizante. A mensagem TBM_GETTHUMBLENGTH recupera o comprimento do deslizador. A mensagem TBM_GETCHANNELRECT recupera o retângulo delimitador do canal da barra, que é a área sobre a qual o controle deslizante se move. Ele contém o realce quando um intervalo é selecionado. Se uma barra de deslocamento tiver o estilo TBS_FIXEDLENGTH, pode enviar a mensagem TBM_SETTHUMBLENGTH para alterar o comprimento do controle deslizante.

Você recupera ou define o intervalo de seleção enviando mensagens para o controlador deslizante. Use a mensagem TBM_SETSEL para definir as posições inicial e final de uma seleção. Para definir apenas a posição inicial ou apenas a posição final de uma seleção, envie uma mensagem TBM_SETSELSTART ou TBM_SETSELEND. Para recuperar as posições iniciais ou finais de um intervalo de seleção, envie uma mensagem TBM_GETSELSTART ou TBM_GETSELEND. Para limpar um intervalo de seleção e restaurar a barra de faixas para o intervalo original, envie a mensagem TBM_CLEARSEL.

Observação

É responsabilidade do aplicativo garantir que o usuário não possa selecionar valores fora do intervalo de seleção. O próprio controle não impede que o utilizador desloque o cursor para fora do intervalo.

 

Mensagens de notificação da barra de faixas

Uma barra de controle notifica a janela pai das ações do usuário enviando ao pai uma mensagem WM_HSCROLL ou WM_VSCROLL. Uma barra de faixas com o estilo TBS_HORZ envia mensagens WM_HSCROLL. Uma barra de deslocamento com o estilo TBS_VERT envia mensagens de WM_VSCROLL. A palavra de ordem baixa do wParam parâmetro de WM_HSCROLL ou WM_VSCROLL contém o código de notificação. Para os códigos de notificação TB_THUMBPOSITION e TB_THUMBTRACK, a palavra de ordem alta do parâmetro wParam especifica a posição do controle deslizante. Para todos os outros códigos de notificação, a palavra de ordem superior é zero; envie a mensagem TBM_GETPOS para determinar a posição do controle deslizante. O parâmetro lParam é o identificador da barra de faixas.

O sistema envia os códigos de notificação TB_BOTTOM, TB_LINEDOWN, TB_LINEUP e TB_TOP apenas quando o utilizador interage com um controlo deslizante usando o teclado. Os códigos de notificação TB_THUMBPOSITION e TB_THUMBTRACK só são enviados quando o usuário está usando o mouse. Os códigos de notificação TB_ENDTRACK, TB_PAGEDOWN e TB_PAGEUP são enviados em ambos os casos. A tabela a seguir lista os códigos de notificação da barra de controlo e os eventos (códigos de tecla virtual ou eventos de rato) que fazem com que as notificações dos códigos Virtual-Keysejam enviadas.

Código de notificação Motivo enviado
TB_BOTTOM VK_END
TB_ENDTRACK WM_KEYUP (o usuário liberou uma chave que enviou um código de chave virtual relevante)
TB_LINEDOWN VK_RIGHT ou VK_DOWN
ALINHAMENTO_TB VK_LEFT ou VK_UP
TB_PAGEDOWN VK_NEXT (o usuário clicou no canal abaixo ou à direita do controle deslizante)
TB_PAGEUP VK_PRIOR (o usuário clicou no canal acima ou à esquerda do controle deslizante)
TB_THUMBPOSITION WM_LBUTTONUP seguindo um código de notificação TB_THUMBTRACK
TB_THUMBTRACK Movimento do cursor (o utilizador arrastou o cursor)
TB_TOP VK_HOME

 

Processamento de mensagens padrão da barra de controle

Esta seção descreve o processamento de mensagens da janela realizado por uma barra de controle.

Mensagem Processamento realizado
WM_CAPTURECHANGED Cancela o temporizador se um temporizador tiver sido definido durante o processamento de WM_LBUTTONDOWN, e envia o código de notificação TB_THUMBPOSITION, se necessário. Ele sempre envia o código de notificação TB_ENDTRACK.
WM_CREATE Executa inicialização adicional, como definir o tamanho da linha, o tamanho da página e a frequência da marca de escala para valores padrão.
WM_DESTROY Liberta recursos.
WM_ENABLE Repinta a janela da barra de deslocamento.
WM_ERASEBKGND Apaga o fundo da janela, utilizando a cor de fundo atual do controlo deslizante.
WM_GETDLGCODE Retorna o valor do DLGC_WANTARROWS.
WM_KEYDOWN Processa as chaves de direção e envia os códigos de notificação TB_TOP, TB_BOTTOM, TB_PAGEUP, TB_PAGEDOWN, TB_LINEUP e TB_LINEDOWN, conforme apropriado.
WM_KEYUP Envia o código de notificação TB_ENDTRACK se a chave for uma das chaves de direção.
WM_KILLFOCUS Repinta a janela da barra de deslize.
WM_LBUTTONDOWN Define o foco e a captura do rato para a barra de controlo. Quando necessário, ele define um temporizador que determina a rapidez com que o controle deslizante se move em direção ao cursor do mouse quando o usuário mantém pressionado o botão do mouse na janela.
WM_LBUTTONUP Liberta a captura do rato e termina o temporizador caso tenha sido definido durante o processamento de WM_LBUTTONDOWN. Ele envia o código de notificação TB_THUMBPOSITION, se necessário. Ele sempre envia o código de notificação TB_ENDTRACK.
WM_MOUSEMOVE Move o controle deslizante e envia o código de notificação TB_THUMBTRACK ao rastrear o mouse (consulte WM_TIMER).
WM_PAINT Pinta a barra de pista. Se o parâmetro wParam não for NULL, o controlo assume que o valor é um HDC e pinta usando esse contexto de dispositivo.
WM_SETFOCUS Repinta a janela da barra de pista.
WM_SIZE Define as dimensões do trackbar, removendo o controle deslizante se não houver espaço suficiente para o exibir.
WM_TIMER Recupera a posição do mouse e atualiza a posição do controle deslizante. (Ele é recebido somente quando o usuário está arrastando o controle deslizante.)
WM_WININICHANGE Inicializa as dimensões do controle deslizante.

 

Dicas de ferramentas da barra de controlo

Uma barra de trilho criada com o estilo TBS_TOOLTIPS tem um controle de dica de ferramenta padrão. A dica de ferramenta permanece visível e exibe o valor atual à medida que o usuário arrasta o controle deslizante usando o mouse.

Você pode atribuir um novo controle de dica de ferramenta a uma barra de controle enviando a mensagem TBM_SETTOOLTIPS. Para recuperar o identificador para um controle de dica de ferramenta atribuído, use a mensagem TBM_GETTOOLTIPS.