Compartilhar via


Sobre controles estáticos

Os aplicativos geralmente usam controles estáticos para rotular outros controles ou para separar um grupo de controles. Embora os controles estáticos sejam janelas filhas, eles não podem ser selecionados. Portanto, eles não podem receber o foco do teclado e não podem ter uma interface de teclado. Um controle estático que tem o estilo SS_NOTIFY recebe entrada do mouse, notificando a janela pai quando o usuário clica ou clica duas vezes no controle. Os controles estáticos pertencem à classe de janela STAST.

Embora os controles estáticos possam ser usados em janelas sobrepostas, pop-up e filhas, eles são projetados para uso em caixas de diálogo, onde o sistema padroniza seu comportamento. Usando controles estáticos fora das caixas de diálogo, um desenvolvedor aumenta o risco de que o aplicativo possa se comportar de maneira não padrão. Normalmente, um desenvolvedor usa controles estáticos em caixas de diálogo ou usa o estilo SS_OWNERDRAW para criar controles estáticos personalizados.

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

Tipos de Controle Estático

Existem quatro tipos de controles estáticos. Cada tipo tem um ou mais estilos de controle estático.

Controle estático gráfico simples

Um controle estático gráfico simples exibe um quadro ou um retângulo preenchido. Um quadro pode ser desenhado em vários estilos, incluindo preto, cinza ou branco. Além disso, um quadro pode ser desenhado com um estilo gravado para dar-lhe uma aparência tridimensional. Os estilos de quadro incluem SS_BLACKFRAME, SS_GRAYFRAME, SS_WHITEFRAME, SS_ETCHEDHORZ, SS_ETCHEDVERT e SS_ETCHEDFRAME.

Um retângulo pode ser preenchido com cor em um dos três estilos: preto, cinza ou branco. Esses estilos são definidos pelas constantes SS_BLACKRECT, SS_GRAYRECT e SS_WHITERECT.

Os estilos gráficos não podem ser combinados.

Controle estático de texto

Um controle estático de texto exibe texto em um retângulo em um dos cinco estilos:

  • alinhado à esquerda sem quebra automática de linha
  • alinhado à esquerda com quebra automática de linha
  • centralizada
  • alinhada à direita
  • simpless

Esses estilos são definidos pelas constantes SS_LEFTNOWORDWRAP, SS_LEFT, SS_CENTER, SS_RIGHT e SS_SIMPLE, respectivamente. O sistema reorganiza o texto nesses controles de maneiras predefinidas, exceto para o texto "simples", que não é reorganizado.

Um aplicativo pode alterar o texto em um controle estático de texto a qualquer momento usando a função SetWindowText ou a mensagem WM_SETTEXT.

O sistema exibe o máximo de texto possível no controle estático e clipa o que não cabe. Para calcular um tamanho apropriado para o controle, recupere as métricas de fonte para o texto. Para obter mais informações sobre fontes e métricas de fontes, consulte Fontes e texto.

Por padrão, o texto da janela para um controle estático, como para outros controles, pode conter um e comercial que define o seguinte caractere como a tecla de atalho para o controle (ou, no caso da maioria dos controles estáticos, para o controle que ele rotula, que é o próximo controle na ordem de tabulação). Se você deseja exibir e comerciais no texto em vez de usá-los para definir atalhos, inclua o estilo SS_NOPREFIX.

Controle estático de imagem

Um controle estático de imagem pode exibir bitmaps, ícones (incluindo ícones animados) ou metarquivos avançados. O tipo de gráfico que um determinado controle estático exibe depende do estilo do controle: SS_BITMAP, SS_ICON ou SS_ENHMETAFILE. Um aplicativo especifica o estilo quando cria o controle e também especifica um identificador para o bitmap, ícone ou metarquivo para o controle exibir. Depois que o controle é criado, um aplicativo pode associar um gráfico diferente com o controle enviando-lhe uma mensagem STM_SETIMAGE , especificando um identificador para o novo objeto gráfico. Um aplicativo pode recuperar um identificador para o objeto gráfico atualmente associado a um controle estático enviando-lhe uma mensagem STM_GETIMAGE. Um aplicativo envia mensagens para um controle estático usando a função SendDlgItemMessage.

Controle estático desenhado pelo proprietário

Usando o estilo SS_OWNERDRAW, um aplicativo pode assumir a responsabilidade de pintar um controle estático. A janela pai de um controle estático desenhado pelo proprietário (seu proprietário) recebe uma mensagem de WM_DRAWITEM sempre que o controle estático precisa ser pintado. A mensagem inclui um ponteiro para uma estrutura DRAWITEMSTRUCT que contém informações que a janela do proprietário usa ao desenhar o controle.

Processamento de mensagens padrão de controle estático

O procedimento de janela para a classe de janela de controle estático predefinida executa o processamento padrão para todas as mensagens que o procedimento de controle estático não processa. Quando o controle estático retorna FALSE para qualquer mensagem, o procedimento de janela predefinido verifica as mensagens e executa a ação padrão descrita na tabela a seguir. Na tabela, um controle estático de texto é um controle estático com o estilo SS_LEFTNOWORDWRAP, SS_LEFT, SS_CENTER, SS_RIGHT ou SS_SIMPLE.

Mensagem Ação padrão
WM_CREATE Carrega o objeto gráfico e dimensiona a janela para o tamanho do objeto, para controles estáticos gráficos. Não executa nenhuma ação para outros controles estáticos.
WM_DESTROY Liberta e destrói qualquer objeto gráfico, para controles estáticos gráficos. Não executa nenhuma ação para outros controles estáticos.
WM_ENABLE Repinta controles estáticos visíveis.
WM_ERASEBKGND Retorna TRUE, indicando que o controle apaga o plano de fundo.
WM_GETDLGCODE Retorna DLGC_STATIC.
WM_GETFONT Retorna um identificador para a fonte para controles estáticos de texto.
WM_GETTEXT Retorna o número de caracteres copiados.
WM_GETTEXTLENGTH Retorna o comprimento, em caracteres, do texto para um controle estático de texto.
WM_LBUTTONDBLCLK Envia à janela pai um código de notificação STN_DBLCLK se o estilo de controle estiver SS_NOTIFY.
WM_LBUTTONDOWN Envia à janela pai um código de notificação STN_CLICKED se o estilo de controle estiver SS_NOTIFY.
WM_NCLBUTTONDBLCLK Envia à janela pai um código de notificação STN_DBLCLK se o estilo de controle estiver SS_NOTIFY.
WM_NCLBUTTONDOWN Envia à janela pai um código de notificação STN_CLICKED se o estilo de controle estiver SS_NOTIFY.
WM_NCHITTEST Retorna HTCLIENT se o estilo de controle for SS_NOTIFY; caso contrário, retorna HTTRANSPARENT.
WM_PAINT Repinta o controle.
WM_SETFONT Define a fonte e repinta para controles estáticos de texto.
WM_SETTEXT Define o texto e repinta para controles estáticos de texto.

 

O procedimento de janela predefinido passa todas as outras mensagens para DefWindowProc para processamento padrão.