Partilhar via


Sobre Up-Down Controles

Um controle para cima para baixo é um par de botões de seta em que o usuário pode clicar para incrementar ou diminuir um valor, como uma posição de rolagem ou um número exibido em um controle complementar (chamado de janela de amigos).

Para o utilizador, um controlo de incremento e decremento e a sua janela associada muitas vezes parecem ser um único controlo. Você pode especificar que um controle de incremento/decremento se posicione automaticamente ao lado da sua janela associada e que ele defina automaticamente o título da janela associada para a sua posição atual. Por exemplo, poderá utilizar um controlo ascendente-descendente com um campo de edição para solicitar ao utilizador a inserção de um valor numérico. A ilustração a seguir mostra um controlo cima-baixo com um controlo de editar como sua janela associada, uma combinação que às vezes é chamada de controlo tipo spinner.

captura de tela mostrando um controle retangular curto e largo com setas para cima e para baixo na borda direita

Os tópicos a seguir são discutidos nesta seção.

Up-Down Estilos de Controlo

Usando estilos de janela, pode manipular características de um controlo up-down, como este se posiciona em relação à sua janela associada, se define o texto da sua janela associada e se processa as teclas SETA PARA CIMA e SETA PARA BAIXO.

Um controle ascendente com o estilo UDS_ALIGNLEFT ou UDS_ALIGNRIGHT se alinha com a borda esquerda ou direita de sua janela de amigos. A largura da janela de parceiro é reduzida para acomodar a largura do controlo de incremento/decremento.

Um controlo de incremento/decremento com o estilo UDS_SETBUDDYINT define a legenda da sua janela associada sempre que a posição atual muda. O controle insere um separador de milhares entre cada três dígitos de uma cadeia decimal, a menos que o estilo UDS_NOTHOUSANDS seja especificado. Se a janela buddy for uma caixa de listagem, um controlo de incremento/decremento definirá a seleção atual em vez da sua legenda.

Você pode especificar o estilo UDS_ARROWKEYS para fornecer uma interface de teclado para um controlo de subida e descida. Se esse estilo for especificado, o controle processará as teclas de seta para cima e para baixo. O controlo também subclassifica a janela "buddy" para que o controlo possa processar essas teclas quando a janela "buddy" tem o foco.

Se você usar um controle up-down para rolagem horizontal, poderá especificar o estilo UDS_HORZ. Esse estilo faz com que as setas do controle 'up-down' apontem para a esquerda e para a direita em vez de para cima e para baixo.

Por padrão, a posição atual não é alterada se o usuário tentar incrementá-la ou diminuí-la além do valor máximo ou mínimo. Você pode alterar esse comportamento usando o estilo UDS_WRAP, para que a posição "envolva" para o extremo oposto. Por exemplo, incrementar além do limite superior faz a posição voltar ao limite inferior.

Posição e aceleração

Depois que um controle up-down é criado, você pode alterar a posição atual, a posição mínima e a posição máxima do controle enviando mensagens. Você também pode alterar a base radix usada para exibir a posição atual na janela buddy e a taxa na qual a posição atual muda quando a seta para cima ou para baixo é clicada.

Para recuperar a posição atual de um controlo up-down, use a mensagem UDM_GETPOS. Para um controlo de incremento/decremento com uma janela associada, a posição atual é o número no título da janela associada. Como a legenda pode ter sido alterada (por exemplo, o usuário pode ter editado o texto de um controle de edição), o controle up-down recupera a legenda atual e atualiza sua posição atual de acordo.

A legenda da janela buddy pode ser uma cadeia decimal ou hexadecimal, dependendo da base numérica (ou seja, base 10 ou 16) do controlo de incremento/decremento. Você pode definir a base radix usando a mensagem UDM_SETBASE e recuperar a base radix usando a mensagem UDM_GETBASE.

A mensagem UDM_SETPOS ajusta a posição atual de uma janela associada. Observe que, ao contrário de uma barra de rolagem, um controle para cima para baixo muda automaticamente sua posição atual quando as setas para cima e para baixo são clicadas. Um aplicativo, portanto, não precisa definir a posição atual ao processar a mensagem WM_VSCROLL ou WM_HSCROLL.

Você pode alterar as posições mínima e máxima de um controle de incremento e decremento usando a mensagem UDM_SETRANGE. A posição máxima pode ser inferior à mínima e, nesse caso, clicar no botão de seta para cima diminui a posição atual. Dito de outra forma, subir significa mover-se em direção à posição máxima. Para recuperar as posições mínima e máxima para um controlo up-down, use a mensagem UDM_GETRANGE.

Você pode controlar a taxa na qual a posição muda quando o utilizador mantém pressionado um botão de seta, definindo a aceleração do controlo de movimento vertical. A aceleração é definida por uma matriz de UDACCEL estruturas. Cada estrutura especifica um intervalo de tempo e o número de unidades pelas quais aumentar ou diminuir no final desse intervalo. Para definir a aceleração, use a mensagem UDM_SETACCEL. Para recuperar informações de aceleração, use a mensagem UDM_GETACCEL.

O Up-Down padrão controla o processamento de mensagens

Esta secção descreve as mensagens padrão do Windows processadas por um controlo ascendente-descendente.

Mensagem Processamento realizado
WM_CREATE Aloca e inicializa uma estrutura de dados privada e salva seu endereço como dados de janela.
WM_DESTROY Liberta os dados alocados durante o processamento de WM_CREATE.
WM_ENABLE Invalida a janela.
WM_KEYDOWN Altera a posição atual quando se pressiona a tecla SETA PARA CIMA ou SETA PARA BAIXO.
WM_KEYUP Completa a mudança de posição.
WM_LBUTTONDOWN Captura o rato. Se a janela companheira for um controlo de edição ou caixa de listagem, define o foco na janela companheira. Se o mouse estiver sobre o botão para cima ou para baixo, ele começa a mudar a posição e define um temporizador.
WM_LBUTTONUP Completa a mudança de posição e liberta a captura do rato se o controlo de incremento/decremento tiver capturado o rato. Se a janela buddy for um controle de edição, ela selecionará todo o texto no controle de edição.
WM_PAINT Pinta o controlo de incremento/decremento. Se o parâmetro wParam for não-NULL, o controle assumirá que o valor é um HDC e pintará usando esse contexto de dispositivo.
WM_TIMER Altera a posição atual se o mouse estiver sendo pressionado sobre um botão e tiver decorrido um intervalo suficiente.