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.
Esta seção inclui os seguintes tópicos.
- Tipos e estilos
- Tamanho e Altura
- Barras de status de várias partes
- Operações de texto da barra de status
- Barras de status desenhadas pelo proprietário
- Barras de status do modo simples
- Processamento de mensagens da barra de status padrão
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.
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. |