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.
- Enviar mensagens para botões
- Manipulando mensagens de um botão
- mensagens de notificação de botões
- Mensagens coloridas do botão
- de processamento de mensagens padrão do botão
- Tópicos relacionados
Enviar 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 o SendDlgItemMessage, CheckDlgButton, CheckRadioButtone funções 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 pressão e o estado de foco). Para obter informações sobre um estado específico, use uma máscara de bits no valor do estado retornado.
A mensagem BM_SETCHECK define o estado de verificaçã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 o CheckDlgButton ou função de CheckRadioButton é equivalente a enviar uma mensagem BM_SETCHECK. Chamar o 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 para 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.
Tanto a mensagem quanto 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_SETFOCUSe 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_RADIOBUTTONe BS_OWNERDRAW. Outros tipos de botões enviam BN_DBLCLK apenas 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 WM_DRAWITEM contendo o identificador do controle a ser desenhado e informações sobre suas dimensões e estado.
Mensagens coloridas 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 o função GetSysColor ou definir os valores chamando a funçãoSetSysColors. A tabela a seguir mostra os valores de cor de botão padrão.
Valor | Elemento colorido |
---|---|
COLOR_BTNFACE | Caras de botão. |
COLOR_BTNHIGHLIGHT | Realce a área (as bordas superior e esquerda) de um botão. |
COLOR_BTNSHADOW | Área de sombra (as bordas inferior e direita) de um botão. |
COLOR_BTNTEXT | Texto normal (não acinzentado) em botões. |
COLOR_GRAYTEXT | Texto desativado (cinza) em botões. Essa cor é definida como 0 se o driver de vídeo atual não suportar uma cor cinza sólida. |
COLOR_WINDOW | Fundos de janela. |
COLOR_WINDOWFRAME | Caixilharia. |
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 WM_CTLCOLORBTN para a janela pai de um botão antes de desenhar um botão. Esta 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 o texto e as cores de plano de fundo do botão. No entanto, apenas os botões desenhados pelo proprietário respondem à janela pai que processa a mensagem.
Botão Processamento de mensagens padrã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 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 bitmap ou ícone. | ||||||||||||||||
BM_GETSTATE | Retorna o estado de verificação atual, o estado de pressão 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 identificador de ícone ao botão e retorna um identificador para o bitmap ou ícone anterior. | ||||||||||||||||
BM_SETSTATE | Define o estado de pressão do botão. Para botões desenhados pelo proprietário, uma mensagem WM_DRAWITEM é enviada para a janela pai se o estado do botão tiver mudado. | ||||||||||||||||
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 | Marque uma caixa de seleção ou caixa de seleção automática quando o usuário pressiona as teclas mais (+) ou igual (=). Desmarca uma caixa de seleção ou caixa de seleção automática quando o usuário pressiona a tecla menos (–). | ||||||||||||||||
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ço. | ||||||||||||||||
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 de pressão 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 pressão 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 num 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 que obtém 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 pinta 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çãoDefWindowProc para processamento padrão.
Tópicos relacionados