Mensagens de botão
Um botão pode enviar mensagens para sua janela pai e uma janela pai pode enviar mensagens para um botão.
Os tópicos a seguir são discutidos nesta seção.
- Enviando mensagens para botões
- Manipulando mensagens de um botão
- Mensagens de notificação de botões
- Mensagens de cor do botão
- Processamento de mensagens padrão do botão
- Tópicos relacionados
Enviando mensagens para botões
Uma janela pai pode enviar mensagens para um botão em uma janela sobreposta ou filho usando a função SendMessage ou pode enviar mensagens para um botão em uma caixa de diálogo usando as funções SendDlgItemMessage, CheckDlgButton, CheckRadioButton e IsDlgButtonChecked.
Um aplicativo pode usar a mensagem BM_GETCHECK para recuperar o estado de seleção de uma caixa de seleção ou botão de opção. Um aplicativo também pode usar a mensagem BM_GETSTATE para recuperar os estados atuais do botão (o estado de verificação, o estado de envio e o estado de foco). Para obter informações sobre um estado específico, use uma máscara de bits no valor de estado retornado.
A mensagem BM_SETCHECK define o estado de seleção de uma caixa de seleção ou botão de opção, a mensagem retorna zero. A mensagem BM_SETSTATE define o estado de pressão de um botão, essa mensagem também retorna zero. A mensagem BM_SETSTYLE altera o estilo de um botão. Ele foi projetado para alterar estilos de botão dentro de um tipo (por exemplo, alterar uma caixa de seleção para uma caixa de seleção automática). Ele não foi projetado para alterar entre tipos (por exemplo, alterar uma caixa de seleção para um botão de opção). Um aplicativo não deve alterar um botão de um tipo para outro.
Um botão do estilo BS_BITMAP ou BS_ICON exibe um bitmap ou ícone em vez de texto. A mensagem BM_SETIMAGE associa um identificador a um bitmap ou ícone com um botão. A mensagem BM_GETIMAGE recupera um identificador para o bitmap ou ícone associado a um botão.
Um aplicativo também pode usar a mensagem DM_GETDEFID para recuperar o identificador do controle de botão padrão em uma caixa de diálogo. Um aplicativo pode usar a mensagem DM_SETDEFID para definir o botão padrão para uma caixa de diálogo.
Chamar a função CheckDlgButton ou CheckRadioButton é equivalente a enviar uma mensagem BM_SETCHECK. Chamar a função IsDlgButtonChecked é equivalente a enviar uma mensagem BM_GETCHECK.
Manipulando mensagens de um botão
As notificações de um botão são enviadas como mensagens WM_COMMAND ou WM_NOTIFY. Informações sobre qual mensagem é usada podem ser encontradas na página de referência de cada notificação.
Para obter mais informações sobre como manipular mensagens, consulte Controlar mensagens. Consulte também Mensagens de botão.
Mensagens de notificação de botões
Quando o usuário clica em um botão, seu estado muda e o botão envia códigos de notificação, na forma de mensagens WM_COMMAND, para sua janela pai. Por exemplo, um controle de botão envia o código de notificação BN_CLICKED sempre que o usuário escolhe o botão. Em todos os casos (exceto para BCN_HOTITEMCHANGE), a palavra de ordem baixa do parâmetro wParam contém o identificador de controle, a palavra de ordem alta de wParam contém o código de notificação e o parâmetro lParam contém o identificador da janela de controle.
A mensagem e a resposta da janela pai dependem do tipo, estilo e estado atual do botão. A seguir estão os códigos de notificação de botão que um aplicativo deve monitorar e processar.
Código de notificação | Descrição |
---|---|
BCN_HOTITEMCHANGE | O mouse entrou ou saiu da área do cliente de um botão. |
BN_CLICKED | O usuário clicou em um botão. |
BN_DBLCLK ou BN_DOUBLECLICKED | O usuário clicou duas vezes em um botão. |
BN_DISABLE | Um botão está desativado. |
BN_PUSHED ou BN_HILITE | O usuário apertou um botão. |
BN_KILLFOCUS | O botão perdeu o foco do teclado. |
BN_PAINT | O botão deve ser pintado. |
BN_SETFOCUS | O botão ganhou o foco do teclado. |
BN_UNPUSHED ou BN_UNHILITE | O botão não é mais pressionado. |
Um botão envia os códigos de notificação BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SETFOCUS e BN_UNPUSHED somente se tiver o estilo BS_NOTIFY. BN_DBLCLK códigos de notificação são enviados automaticamente para os botões BS_USERBUTTON, BS_RADIOBUTTON e BS_OWNERDRAW. Outros tipos de botão enviam BN_DBLCLK somente se tiverem o estilo BS_NOTIFY. Todos os botões enviam o código de notificação BN_CLICKED, independentemente de seus estilos de botão.
Para botões automáticos, o sistema altera o estado de pressão e pinta o botão. Nesse caso, o aplicativo normalmente processa apenas os códigos de notificação BN_CLICKED e BN_DBLCLK . Para botões que não são automáticos, o aplicativo normalmente responde ao código de notificação enviando uma mensagem para alterar o estado do botão. Para obter informações sobre como enviar mensagens para botões, consulte Enviando mensagens para botões.
Quando o usuário seleciona um botão desenhado pelo proprietário, o botão envia à janela pai uma mensagem de WM_DRAWITEM contendo o identificador do controle a ser desenhado e informações sobre suas dimensões e estado.
Mensagens de cor do botão
O sistema fornece valores de cor padrão para botões. Um aplicativo pode recuperar os valores padrão para essas cores chamando a função GetSysColor ou definir os valores chamando a função SetSysColors. A tabela a seguir mostra os valores padrão de cor do botão.
Valor | Elemento colorido |
---|---|
COLOR_BTNFACE | Faces de botão. |
COLOR_BTNHIGHLIGHT | Área de realce (bordas superior e esquerda) de um botão. |
COLOR_BTNSHADOW | Área de sombra (bordas inferior e direita) de um botão. |
COLOR_BTNTEXT | Texto normal (não acinzentado) nos botões. |
COLOR_GRAYTEXT | Texto desativado (cinza) nos botões. Essa cor será definida como 0 se o driver de vídeo atual não oferecer suporte a uma cor cinza sólida. |
COLOR_WINDOW | Fundos de janela. |
COLOR_WINDOWFRAME | Caixilhos de janela. |
COLOR_WINDOWTEXT | Texto em janelas. |
No entanto, chamar SetSysColors afeta todos os aplicativos, portanto, você não deve chamar essa função para personalizar botões para seu aplicativo.
O sistema envia uma mensagem de WM_CTLCOLORBTN para a janela pai de um botão antes de desenhar um botão. Essa mensagem contém um identificador para o contexto do dispositivo do botão e um identificador para a janela filho. A janela pai pode usar essas alças para alterar as cores do texto e do plano de fundo do botão. No entanto, apenas os botões desenhados pelo proprietário respondem à janela pai que processa a mensagem.
Processamento de mensagens padrão do botão
O procedimento de janela para a classe de janela de controle de botão predefinida executa o processamento padrão para todas as mensagens que o procedimento de controle de botão não processa. Quando o procedimento de controle de botão retorna FALSE para qualquer mensagem, o procedimento de janela predefinido verifica as mensagens e executa as ações padrão listadas na tabela a seguir.
Mensagem | Ação padrão | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BM_CLICK | Envia ao botão uma mensagem WM_LBUTTONDOWN e uma mensagem WM_LBUTTONUP e envia à janela pai um código de notificação BN_CLICKED. | ||||||||||||||||
BM_GETCHECK | Retorna o estado de verificação do botão. | ||||||||||||||||
BM_GETIMAGE | Retorna um identificador para o bitmap ou ícone associado ao botão ou NULL se o botão não tiver nenhum bitmap ou ícone. | ||||||||||||||||
BM_GETSTATE | Retorna o estado de verificação atual, o estado de push e o estado de foco do botão. | ||||||||||||||||
BM_SETCHECK | Define o estado de verificação para todos os estilos de botões de opção e caixas de seleção. Se o parâmetro wParam for maior que zero para botões de opção, o botão receberá o estilo WS_TABSTOP. | ||||||||||||||||
BM_SETIMAGE | Associa o bitmap especificado ou o identificador de ícone ao botão e retorna um identificador ao bitmap ou ícone anterior. | ||||||||||||||||
BM_SETSTATE | Define o estado de pressão do botão. Para botões desenhados pelo proprietário, uma mensagem de WM_DRAWITEM é enviada para a janela pai se o estado do botão tiver sido alterado. | ||||||||||||||||
BM_SETSTYLE | Define o estilo do botão. Se a palavra de ordem baixa do parâmetro lParam for TRUE, o botão será redesenhado. | ||||||||||||||||
WM_CHAR | Marca uma caixa de seleção ou caixa de seleção automática quando o usuário pressiona as teclas de adição (+) ou igual (=). Desmarca uma caixa de seleção ou caixa de seleção automática quando o usuário pressiona a tecla de subtração (–). | ||||||||||||||||
WM_ENABLE | Pinta o botão. | ||||||||||||||||
WM_ERASEBKGND | Apaga o plano de fundo dos botões desenhados pelo proprietário. Os planos de fundo de outros botões são apagados como parte do processamento de WM_PAINT e WM_ENABLE. | ||||||||||||||||
WM_GETDLGCODE | Retorna valores que indicam o tipo de entrada processada pelo procedimento de botão padrão, conforme mostrado na tabela a seguir.
|
||||||||||||||||
WM_GETFONT | Retorna um identificador para a fonte atual. | ||||||||||||||||
WM_KEYDOWN | Pressiona o botão se o usuário pressionar a barra de espaços. | ||||||||||||||||
WM_KEYUP | Libera a captura do mouse para todos os casos, exceto a tecla TAB. | ||||||||||||||||
WM_KILLFOCUS | Remove o retângulo de foco de um botão. Para botões de pressão e botões padrão, o retângulo de foco é invalidado. Se o botão tiver a captura do mouse, a captura será liberada, o botão não será clicado e qualquer estado de push será removido. | ||||||||||||||||
WM_LBUTTONDBLCLK | Envia um código de notificação BN_DBLCLK para a janela pai para botões de opção e botões desenhados pelo proprietário. Para outros botões, um clique duplo é processado como uma mensagem WM_LBUTTONDOWN. | ||||||||||||||||
WM_LBUTTONDOWN | Realça o botão se a posição do cursor do mouse estiver dentro do retângulo do cliente do botão. | ||||||||||||||||
WM_LBUTTONUP | Libera a captura do mouse se o botão tiver a captura do mouse. | ||||||||||||||||
WM_MOUSEMOVE | Executa a mesma ação que WM_LBUTTONDOWN, se o botão tiver a captura do mouse. Caso contrário, nenhuma ação será executada. | ||||||||||||||||
WM_NCCREATE | Transforma qualquer botão BS_OWNERDRAW em um botão BS_PUSHBUTTON. | ||||||||||||||||
WM_NCHITTEST | Retorna HTTRANSPARENT, se o controle de botão for uma caixa de grupo. | ||||||||||||||||
WM_PAINT | Desenha o botão de acordo com seu estilo e estado atual. | ||||||||||||||||
WM_SETFOCUS | Desenha um retângulo de foco no botão obtendo o foco. Para botões de opção e botões de opção automáticos, a janela pai recebe um código de notificação BN_CLICKED . | ||||||||||||||||
WM_SETFONT | Define uma nova fonte e, opcionalmente, atualiza a janela. | ||||||||||||||||
WM_SETTEXT | Define o texto do botão. No caso de uma caixa de grupo, a mensagem é pintada sobre o texto preexistente antes de repintar a caixa de grupo com o novo texto. | ||||||||||||||||
WM_SYSKEYUP | Libera a captura do mouse para todos os casos, exceto a tecla TAB. |
O procedimento de janela predefinido passa todas as outras mensagens para a função DefWindowProc para processamento padrão.
Tópicos relacionados