Barras de Status (Controles do Windows)

Uma barra de status é uma janela horizontal na parte inferior de uma janela pai na qual um aplicativo pode exibir vários tipos de informações de status. A barra de status pode ser dividida em partes para exibir mais de um tipo de informação. A captura de tela a seguir mostra a barra de status no aplicativo Microsoft Windows Paint. Nesse caso, a barra de status contém o texto "Para obter ajuda, clique em tópicos da Ajuda no menu Ajuda". A barra de status é a área na parte inferior da janela que contém o texto da Ajuda e as informações de coordenadas.

screen shot of the paint application, with a status bar that contains hints about online help

Esta seção inclui os seguintes tópicos.

Tipos e estilos

A posição padrão de uma barra de status está ao longo da parte inferior da janela pai, mas você pode especificar o estilo CCS_TOP para que ele apareça na parte superior da área do cliente da janela pai.

Você pode especificar o estilo SBARS_SIZEGRIP para incluir uma alça de dimensionamento na extremidade direita da barra de status.

Observação

A combinação dos estilos CCS_TOP e SBARS_SIZEGRIP não é recomendada porque a aderência de dimensionamento resultante não é funcional.

 

Tamanho e Altura

O procedimento de janela para a barra de status define automaticamente o tamanho inicial e a posição da janela, ignorando os valores especificados na função CreateWindowEx. A largura é a mesma da área de cliente da janela pai. A altura é baseada nas métricas da fonte que está atualmente selecionada no contexto do dispositivo da barra de status e na largura das bordas da janela.

O procedimento de janela ajusta automaticamente o tamanho da barra de status sempre que recebe uma mensagem WM_SIZE. Normalmente, quando o tamanho da janela pai muda, o pai envia uma mensagem de WM_SIZE para a barra de status.

Um aplicativo pode definir a altura mínima da área de desenho de uma barra de status enviando à janela uma mensagem SB_SETMINHEIGHT , especificando a altura mínima, em pixels. A área de desenho não inclui as bordas da janela. Uma altura mínima é útil para desenhar em uma barra de status desenhada pelo proprietário. Para obter mais informações, consulte Barras de status desenhadas pelo proprietário mais adiante neste capítulo.

Você recupera as larguras das bordas de uma barra de status enviando à janela uma mensagem SB_GETBORDERS. A mensagem inclui o endereço de uma matriz de três elementos que recebe as larguras.

Barras de status de várias partes

Uma barra de status pode ter muitas partes diferentes, cada uma exibindo uma linha de texto diferente. Você divide uma barra de status em partes enviando à janela uma mensagem SB_SETPARTS, especificando o número de partes a serem criadas e o endereço de uma matriz inteira. A matriz contém um elemento para cada parte, e cada elemento especifica a coordenada do cliente da borda direita de uma peça.

Uma barra de status pode ter no máximo 256 partes, embora os aplicativos normalmente usem muito menos do que isso. Você recupera uma contagem das partes em uma barra de status, bem como a coordenada da borda direita de cada parte, enviando à janela uma mensagem SB_GETPARTS.

Operações de texto da barra de status

Você define o texto de qualquer parte de uma barra de status enviando a mensagem SB_SETTEXT, especificando o índice baseado em zero de uma parte, um endereço da cadeia de caracteres a ser desenhada na parte e a técnica para desenhar a cadeia de caracteres. A técnica de desenho determina se o texto tem uma borda e, se tiver, o estilo da borda. Ele também determina se a janela pai é responsável por desenhar o texto. Para obter mais informações, consulte a seção Barras de status desenhadas pelo proprietário abaixo.

Por padrão, o texto é alinhado à esquerda dentro da parte especificada de uma barra de status. Você pode incorporar caracteres de tabulação (\ t) no texto para centralizá-lo ou alinhá-lo à direita. O texto à direita de um único caractere de tabulação é centralizado e o texto à direita de um segundo caractere de tabulação é alinhado à direita.

Para recuperar texto de uma barra de status, use o SB_GETTEXTLENGTH e SB_GETTEXT mensagens.

Se seu aplicativo usa uma barra de status que tem apenas uma parte, você pode usar as mensagens WM_SETTEXT, WM_GETTEXT e WM_GETTEXTLENGTH para executar operações de texto. Essas mensagens lidam apenas com a parte que tem um índice de zero, permitindo que você trate a barra de status como um controle de texto estático.

Para exibir uma linha de status sem criar uma barra de status, use a função DrawStatusText. A função usa as mesmas técnicas para desenhar o status como o procedimento de janela para a barra de status, mas não define automaticamente o tamanho e a posição das informações de status. Ao chamar a função, você deve especificar o tamanho e a posição das informações de status, bem como o contexto do dispositivo da janela na qual desenhá-la.

Barras de status desenhadas pelo proprietário

Você pode definir partes individuais de uma barra de status para serem partes desenhadas pelo proprietário. O uso dessa técnica lhe dá mais controle do que você teria sobre a aparência da parte da janela. Por exemplo, você pode exibir um bitmap em vez de texto ou desenhar texto usando uma fonte diferente.

Para definir uma parte da janela como desenhada pelo proprietário, envie a mensagem SB_SETTEXT para a barra de status, especificando a peça e a SBT_OWNERDRAW técnica de desenho. Quando SBT_OWNERDRAW é especificado, o parâmetro lParam é um valor definido pelo aplicativo de 32 bits que o aplicativo pode usar ao desenhar a peça. Por exemplo, você pode especificar um identificador de fonte, um identificador de bitmap, um endereço de uma cadeia de caracteres e assim por diante.

Quando uma barra de status precisa desenhar uma parte desenhada pelo proprietário, ela envia a mensagem WM_DRAWITEM para a janela pai. O parâmetro wParam da mensagem é o identificador de janela filho da barra de status e o parâmetro lParam é o endereço de uma estrutura DRAWITEMSTRUCT. A janela pai usa as informações na estrutura para desenhar a peça. Para uma parte desenhada pelo proprietário de uma barra de status, DRAWITEMSTRUCT contém as seguintes informações.

Membro Descrição
CtlType Indefinido; não usar.
CtlID Identificador da janela filho da barra de status.
ID do item Índice base zero da peça a ser sorteada.
itemAção Indefinido; não usar.
itemState Indefinido; não usar.
hwndItem Manipule a barra de status.
hDC Manipule o contexto do dispositivo da barra de status.
rcItem Coordenadas da parte da janela a ser desenhada. As coordenadas são relativas ao canto superior esquerdo da barra de status.
itemData Valor de 32 bits definido pelo aplicativo especificado no parâmetro lParam da mensagem SB_SETTEXT.

 

Barras de status do modo simples

Você coloca uma barra de status no "modo simples" enviando-lhe uma mensagem SB_SIMPLE. Uma barra de status do modo simples exibe apenas uma parte. Quando o texto da janela é definido, a janela é invalidada, mas não é redesenhada até a próxima WM_PAINT. Esperar pela mensagem reduz a cintilação da tela, minimizando o número de vezes que a janela é redesenhada. Uma barra de status de modo simples é útil para exibir o texto da Ajuda para itens de menu enquanto o usuário está rolando pelo menu.

A cadeia de caracteres que uma barra de status exibe no modo simples é mantida separadamente das cadeias de caracteres exibidas no modo não simples. Isso significa que você pode colocar a janela no modo simples, definir seu texto e alternar de volta para o modo não simples sem que o texto do modo não simples seja alterado.

Ao definir o texto de uma barra de status de modo simples, você pode especificar qualquer técnica de desenho, exceto SBT_OWNERDRAW. Uma barra de status de modo simples não oferece suporte ao desenho do proprietário.

Processamento de mensagens da barra de status padrão

Esta seção descreve as mensagens manipuladas pelo procedimento de janela para a classe STATUSCLASSNAME predefinida.

Mensagem Processamento padrão
WM_CREATE Inicializa a barra de status.
WM_DESTROY Libera recursos alocados para a barra de status.
WM_GETFONT Retorna o identificador para a fonte atual com a qual a barra de status desenha seu texto.
WM_GETTEXT Copia o texto da primeira parte de uma barra de status para um buffer. Ele retorna um valor de 32 bits que especifica o comprimento, em caracteres, do texto e a técnica usada para desenhar o texto.
WM_GETTEXTLENGTH Retorna um valor de 32 bits que especifica o comprimento, em caracteres, do texto na primeira parte de uma barra de status e a técnica usada para desenhar o texto.
WM_NCHITTEST Retorna o valor HTBOTTOMRIGHT se o cursor do mouse estiver no aperto de dimensionamento, fazendo com que o sistema exiba o cursor de dimensionamento. Se o cursor do mouse não estiver no aperto de dimensionamento, a barra de status passa essa mensagem para a função DefWindowProc.
WM_PAINT Pinta a região inválida da barra de status. Se o parâmetro wParam for não-NULL, o controle assume que o valor é um HDC e pinta usando esse contexto de dispositivo.
WM_SETFONT Seleciona o identificador de fonte no contexto do dispositivo para a barra de status.
WM_SETTEXT Copia o texto especificado para a primeira parte de uma barra de status, usando a operação de desenho padrão (especificada como zero). Ele retorna TRUE se bem-sucedido ou FALSE caso contrário.
WM_SIZE Redimensiona a barra de status com base na largura atual da área do cliente da janela pai e na altura da fonte atual da barra de status.