Estados de botão

Esta seção discute como a seleção de um botão altera seu estado e como o aplicativo deve responder.

A seção consiste nos seguintes tópicos:

Seleção de botões

O usuário pode selecionar um botão de três maneiras: clicando nele com o mouse, pressionando a tecla ENTER ou (se o botão fizer parte de um grupo definido pelo estilo WS_GROUP ) pressionando a tecla Tab até o botão selecionado no grupo e usando as teclas de seta para se mover dentro desse grupo. Os dois métodos de tabulação fazem parte da interface de teclado predefinida fornecida pelo sistema. Para obter uma descrição completa dessa interface, consulte Caixas de diálogo.

A seleção de um botão normalmente causa os seguintes eventos:

  • O sistema dá ao botão o foco do teclado.
  • O botão envia à janela pai uma mensagem para notificá-lo da seleção.
  • A janela pai (ou o sistema) envia ao botão uma mensagem para alterar seu estado.
  • A janela pai (ou o sistema) pinta novamente o botão para refletir seu novo estado.

Elementos de um estado de botão

O estado de um botão pode ser caracterizado por seu estado de foco, estado de push e estado de verificação.

Estado do foco

O estado de foco se aplica a uma caixa de seleção, botão de opção, botão de pressão ou botão desenhado pelo proprietário. Um botão recebe o foco do teclado quando o usuário o seleciona e perde o foco quando o usuário seleciona outro controle. Apenas um controle pode ter o foco do teclado por vez.

Quando um botão tem o foco do teclado, o sistema normalmente realça o texto, o ícone ou o bitmap de um botão, cercando-o com uma linha pontilhada. Além disso, um botão tem uma borda escura pesada quando tem o foco. O sistema altera automaticamente o realce para um botão automático, mas o aplicativo deve alterar o realce para um botão não automático enviando mensagens.

Estado do Push

O estado de pressão aplica-se a um botão de pressão, caixa de seleção, botão de opção ou caixa de seleção de três estados, mas não se aplica a outros botões. O estado de pressão de um botão pode ser pressionado ou não pressionado. Quando um botão (ou qualquer botão com o estilo BS_PUSHLIKE) é pressionado, o botão é desenhado como um botão afundado. Quando não é pressionado, é desenhado como um botão elevado. Quando uma caixa de seleção, botão de opção ou caixa de seleção de três estados é clicada, o plano de fundo do botão fica acinzentado. Quando ele não é pressionado, o fundo do botão não fica acinzentado.

Estado de verificação

O estado de seleção se aplica a uma caixa de seleção, botão de opção ou caixa de seleção de três estados, mas não se aplica a outros botões. O estado pode ser marcado, desmarcado ou (para caixas de seleção de três estados) indeterminado. Uma caixa de seleção é marcada quando contém uma marca de seleção e é desmarcada quando não contém. Um botão de opção é verificado quando contém um ponto preto; é limpo quando não o faz. Uma caixa de seleção de três estados é marcada quando contém uma marca de seleção, é desmarcada quando não contém e é indeterminada quando contém uma caixa cinza. O sistema altera automaticamente o estado de verificação de um botão automático, mas o aplicativo deve alterar o estado de verificação de um botão não automático.

Alterações em um estado de botão

Quando o usuário seleciona um botão, geralmente é necessário alterar um ou mais elementos de estado do botão. O sistema altera automaticamente o estado de foco para todos os tipos de botões, o estado de pressão para botões ou botões com o estilo BS_PUSHLIKE e o estado de verificação para todos os botões automáticos. O aplicativo deve fazer todas as outras alterações de estado, levando em conta o tipo, o estilo e o estado atual do botão. A lista a seguir mostra os elementos de estado que devem ser alterados para cada tipo de botão:

  • Uma caixa de seleção deve alterar o estado de seleção.
  • Um botão de opção deve alterar o estado de verificação. Também pode ser necessário alterar o estado de verificação de outros botões de opção no mesmo grupo para garantir a natureza mutuamente exclusiva dos botões de opção.
  • Como o estado de um botão desenhado pelo proprietário depende do aplicativo, o que o aplicativo deve alterar no botão pode variar. Nenhum elemento de uma caixa de grupo deve ser alterado, porque os usuários não podem selecionar caixas de grupo.

Um aplicativo pode determinar o estado de um botão enviando-lhe uma mensagem BM_GETCHECK ou BM_GETSTATE, o aplicativo pode definir o estado de um botão enviando-lhe uma mensagem BM_SETCHECK ou BM_SETSTATE.