Compartilhar via


TN031: barras de controle

Dica

A nota técnica a seguir não foi atualizada desde que ela foi incluída pela primeira vez na documentação online.Como resultado, alguns procedimentos e tópicos podem estar incorretos ou expirados.Para obter as informações mais recentes, é recomendável que você procure o tópico de interesse no índice de documentação online.

Essa observação descreve classes da barra de controle do: MFC o CControlBargeral, CStatusBar, CToolBar, CDialogBar, e CDockBar.

CControlBar

ControlBar é CWnd- classe derivada que:

  • É alinhado na parte superior ou inferior de uma janela do quadro.

  • Pode conter os itens filhos que são controles HWND- base (por exemplo, CDialogBar) ou itens com base não deHWND (por exemplo, CToolBar, CStatusBar).

As barras de controle dão suporte aos estilos adicionais:

  • pin deCBRS_TOP(o padrão) a barra de controle na parte superior.

  • pin deCBRS_BOTTOMa barra de controle na parte inferior.

  • CBRS_NOALIGN não reposições da barra de controle quando o pai resize.

As classes derivadas de CControlBar fornecem as implementações mais interessantes:

  • a barra de status de ACStatusBar, itens é painéis da barra de status que contém texto.

  • a barra de ferramentas de ACToolBar, itens é botões de bitmap alinhados em uma linha.

  • CDialogBar A barra de ferramentas- como o quadro que contém os controles padrão do windows (criados de um recurso do modelo na caixa de diálogo).

  • CDockBar A generalizou a área de encaixe de outros objetos derivados CControlBar . As funções de membro e variáveis específicos disponíveis nesta classe são prováveis ser alterados em versões futuras.

Todos os objetos/windows da barra de controle serão janelas filho de qualquer janela pai do quadro. Geralmente são adicionados como irmão para a área de cliente do quadro (por exemplo, um cliente MDI ou exibição). A ID da janela filho de uma barra de controle é importante. O layout padrão da barra de controle só funciona para barras de controle com IDs no intervalo de AFX_IDW_CONTROLBAR_FIRST a AFX_IDW_CONTROLBAR_LAST. Observe que mesmo que haja um intervalo de IDs de 256 barras de controle, os primeiros 32 dessas IDs da barra de controle são especiais desde que são diretamente suportados pela arquitetura de visualização da impressão.

A classe de CControlBar da implementação padrão para:

  • Alinhando a barra de controle para a parte superior, inferior, ou em qualquer lado do quadro.

  • Atribuindo matrizes do item do controle.

  • Dando suporte a implementação das classes derivadas.

Os objetos da barra de controle C++ serão inseridos normalmente como membros de uma classe derivada de CFrameWnd , e limpos quando o pai HWND e o objeto são destruídos. Se você precisar alocar um objeto da barra de controle no heap, basta definir o membro de m_bAutoDestruct a Verdadeiro para fazer a barra de controle “delete this” quando HWND é destruído.

Dica

Se você criar seu próprio CControlBar- classe derivada, em vez de usar uma das classes derivadas MFC, como CStatusBar, CToolBar, ou CDialogBar, você precisará definir o membro de dados de m_dwStyle .Isso pode ser feito na substituição de Criar:

// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create( CWnd* pParentWnd, DWORD dwStyle, UINT nID )
{
   m_dwStyle = dwStyle;

   .
   .
   .
}

Algoritmo de layout da barra de controle

O algoritmo de layout da barra de controle é muito simples. A janela do quadro envia uma mensagem WM_SIZEPARENT a todos os filhos no intervalo da barra de controle. Juntamente com essa mensagem, um ponteiro para o retângulo de cliente do pai é passado. Essa mensagem é enviada aos filhos em ordem z. Os filhos da barra de controle usam essas informações para posicionar-se e para diminuir o tamanho da área de cliente do pai. O retângulo final que é deixado para a área comum de cliente (menos barras de controle) é usado para posicionar a janela principal do cliente (geralmente um cliente MDI, uma exibição ou uma janela do separador.)

Consulte CWnd::RepositionBars e CFrameWnd::RecalcLayout para obter mais detalhes.

As mensagens particulares do windows MFC, incluindo WM_SIZEPARENT, são documentadas em Observação 24 técnica.

CStatusBar

Uma barra de status é uma barra de controle que tem uma linha de painéis de saída de texto. Há duas maneiras comuns de usar os painéis de saída de texto:

  • Como uma linha de mensagem

    (por exemplo, a linha de mensagem padrão da ajuda no menu). Esses são acessados com frequência por um base 0 indexado

  • Como indicadores de status

    (por exemplo, os indicadores CAP, os NUMÉRICOS e de SCRL). Esses são normalmente acessados pela ID da cadeia de caracteres/comando

A fonte para a barra de status é 10 pontos (MS sans-serif determinadas pelo guia de criação do aplicativo da interface do windows ou correspondência de mapeadores da fonte pela melhor de uma fonte proporcional de 10 suíços de ponto). Em algumas versões do windows, como a edição japonês, as fontes selecionadas são diferentes.

As cores usadas na barra de status também são consistentes com a recomendação da guia de criação do aplicativo da interface do windows. Essas cores não são codificados de hardware e são alteradas dinamicamente em resposta à personalização de usuário no painel de controle.

Item

Valor de PARA windows

RGB padrão

Plano de fundo da barra de status

COLOR_BTNFACE

RGB (192, 192, 192)

Texto da barra de status

COLOR_BTNTEXT

RGB (000, 000, 000)

Bordas principais/esquerda da barra de status

COLOR_BTNHIGHLIGHT

RGB (255, 255, 255)

Bot da barra de status/bordas esquerda

COLOR_BTNSHADOW

RGB (128, 128, 128)

Suporte de CCmdUI para CStatusBar

A maneira que os indicadores são atualizados em geral é por meio do mecanismo de ON_UPDATE_COMMAND_UI . No tempo ocioso, a barra de status chama o manipulador de ON_UPDATE_COMMAND_UI com a ID da cadeia de caracteres do painel de medidores.

O manipulador de ON_UPDATE_COMMAND_UI pode chamar:

  • Habilitar: Para habilitar ou desabilitar o painel. Os aspectos desabilitados de um painel exatamente como um painel habilitado mas o texto são invisíveis (ou seja, desativa o indicador de texto).

  • SetText: Para modificar o texto. Tenha cuidado se você usar esse porque o painel não será redimensionado automaticamente.

Consultar para classificar CStatusBarna referência da biblioteca de classes para obter detalhes sobre as APIs de criação e de personalização de CStatusBar . A maioria de personalização das barras de status deve ser feita antes que a barra de status ser estabelecida inicialmente visível.

A barra de status só da suporte a um painel extensível, geralmente o primeiro o painel. O tamanho desse painel é realmente um tamanho mínimo. Se a barra de status é maior que o tamanho mínimo de todos os painéis, toda a largura adicional será fornecida ao painel extensível. O aplicativo padrão por uma barra de status ele alinhado em medidores para o CAP, NUMERIC e o SCRL desde que o primeiro painel é extensível.

CToolBar

Uma barra de ferramentas é uma barra de controle com uma linha de botões de bitmap que podem incluir separadores. Dois estilos dos botões têm suporte: chaves e botões da caixa de seleção. A funcionalidade de rádio de grupo pode ser criada com botões e ON_UPDATE_COMMAND_UIda caixa de seleção.

Todos os botões de bitmap na barra de ferramentas são obtidos de um bitmap. Esse bitmap deve conter uma imagem ou glifo para cada botão. Normalmente a ordem das imagens/glifos no bitmap é a mesma ordem que serão desenhados na tela. (Isso pode ser alterado usando as APIs de personalização.)

Cada botão deve ser o mesmo tamanho. A opção é os pixels de 24x22 padrão. Cada imagem/glifo deve ser o mesmo tamanho e deve ser instaladas lado a lado no bitmap. A imagem/tamanho padrão de glifo é os pixels 16x15. Em virtude disso, para uma barra de ferramentas com os botões 10 (usando tamanhos padrão), é necessário um bitmap que é 160 pixels largura e 15 pixels altos.

Cada botão tem um e apenas um glifo/imagens. Os estados e os estilos diferentes do botão (por exemplo, pressionada, cima, para baixo, de desabilitação, desabilitado para baixo, indefinido) são gerados algorìtmica de aquele um glifo/imagem. Alguns colorem o bitmap ou DIB pode ser usado em teoria. O algoritmo para gerar os estados diferentes do botão funciona melhor quando a imagem original é tons de cinza. Observe os botões da barra de ferramentas padrão e o clipart do botão da barra de ferramentas fornecidas no exemplo CLIPART gerais de MFC para obter exemplos.

As cores usadas na barra de ferramentas também são consistentes com a recomendação da guia de criação do aplicativo da interface do windows. Essas cores não são codificados de hardware e são alteradas dinamicamente em resposta à personalização de usuário no painel de controle.

Item

Valor de PARA windows

RGB padrão

Plano de fundo da barra de ferramentas

COLOR_BTNFACE

RGB (192.192.192)

Botões da barra de ferramentas bordas esquerda/principais

COLOR_BTNHIGHLIGHT

RGB (255.255.255)

Bot os botões da barra de ferramentas bordas esquerda/

COLOR_BTNSHADOW

RGB (128.128.128)

Além disso, os botões de bitmap da barra de ferramentas recolored como se fossem controles padrão do botão do windows. Isso recoloring que ocorre quando o bitmap é carregado de recursos e em resposta a uma alteração em cores do sistema em resposta à personalização de usuário no painel de controle. As cores em um bitmap da barra de ferramentas recolored automaticamente para que devem ser usadas cuidadosamente. Se você não quiser ter uma parte do bitmap recolored, use uma cor que aproximado de perto um dos valores mapeados de RGB. O mapeamento é feita com base em valores exatos de RGB.

Valor RGB

Dinamicamente mapeado PARA de valor

RGB (000, 000, 000)

COLOR_BTNTEXT

RGB (128, 128, 128)

COLOR_BTNSHADOW

RGB (192, 192, 192)

COLOR_BTNFACE

RGB (255, 255, 255)

COLOR_BTNHIGHLIGHT

Consultar para classificar CToolBara referência da biblioteca de classes para obter detalhes sobre as APIs de criação e de personalização de CToolBar . A maioria de personalização das barras de ferramentas deve ser feita antes que a barra de ferramentas ser estabelecida inicialmente visível.

As APIs de personalização podem ser usados para ajustar as IDs do botão, os estilos, largura de espaçador e que a imagem/glifo são usados para o botão. Por padrão não é necessário usar essas APIs.

Suporte de CCmdUI para CToolBar

A maneira como os botões da barra de ferramentas são atualizados sempre é por meio do mecanismo de ON_UPDATE_COMMAND_UI . No tempo ocioso, a barra de ferramentas chama o manipulador de ON_UPDATE_COMMAND_UI com a ID de comando do botão. ON_UPDATE_COMMAND_UI não é chamado para separadores, mas é chamado para chaves e botões da caixa de seleção.

O manipulador de ON_UPDATE_COMMAND_UI pode chamar:

  • Habilitar: Para habilitar ou desabilitar o botão. Isso funciona igualmente para chaves e botões da caixa de seleção.

  • SetCheck: Para definir o estado da verificação de um botão. Chamar ou para um botão da barra de ferramentas transformá-lo-á em um botão da caixa de seleção. SetCheck assume um parâmetro que pode ser 0 (não verificado), 1 (verificado) ou 2 (não)

  • SetRadio: Taquigrafia para SetCheck.

Os botões da caixa de seleção são botões “AUTO” da caixa de seleção; ou seja, quando o usuário o pressionar alterarão imediatamente o estado. Checked é a caneta ou o estado compactado. Não há nenhum modo interno da interface de usuário de alterar um botão no estado “não”; isso deve ser feito com o código.

As APIs de personalização permiti-lo-ão alterar o estado de um botão da barra de ferramentas determinado, preferivelmente você deve alterar esses estados no manipulador de ON_UPDATE_COMMAND_UI para o comando que o botão da barra de ferramentas representa. Lembre-se, o processamento alterará o estado ocioso de botões da barra de ferramentas com o manipulador de ON_UPDATE_COMMAND_UI , de modo que todas as alterações feitas a esses estados com SetButtonStyle podem obter perdido após a ociosidade seguir.

Os botões da barra de ferramentas enviará mensagens de WM_COMMAND como os botões regulares ou itens de menu e normalmente são tratados por um manipulador de ON_COMMAND na mesma classe que fornece o manipulador de ON_UPDATE_COMMAND_UI .

Há quatro estilos do botão da barra de ferramentas (valores de TBBS_) usados para estados de exibição:

  • TBBS_CHECKED:   A caixa de seleção fica marcada atualmente (para baixo).

  • TBBS_INDETERMINATE:   A caixa de seleção está indeterminada.

  • TBBS_DISABLED:   O botão será desabilitado no momento.

  • TBBS_PRESSED:   O botão é pressionada no momento.

Os seis estilos regionais do botão da guia de criação do aplicativo da interface do windows são representados pelos seguintes valores de TBBS:

  • Acima de 0 =

  • O mouse para baixo (= TBBS_PRESSED| qualquer outro estilo)

  • = Desabilitado TBBS_DISABLED

  • Para baixo = TBBS_CHECKED

  • Desabilitado para baixo = TBBS_CHECKED | TBBS_DISABLED

  • Indefinido = TBBS_INDETERMINATE

CDialogBar

Uma barra da caixa de diálogo é uma barra de controle que contém controles padrão do windows. Atua como uma caixa de diálogo que contém os controles e a suporte à guia entre eles. Também atua como uma caixa de diálogo que usa um modelo da caixa de diálogo para representar a barra.

CDialogBar é usado para a barra de ferramentas de visualização de impressão, que contém controles da tecla padrão.

Usar CDialogBar é como a utilização de CFormView. Você deve definir um modelo da caixa de diálogo para a barra da caixa de diálogo e remover todos os estilos exceto WS_CHILD. Observe que a caixa de diálogo não deve ser visível.

As notificações de controle para CDialogBar serão enviadas ao pai da barra de controle (assim como os botões da barra de ferramentas).

Suporte de CCmdUI para CDialogBar

Os botões da barra da caixa de diálogo devem ser atualizados por meio do mecanismo do manipulador de ON_UPDATE_COMMAND_UI . No tempo ocioso, a barra da caixa de diálogo chama o manipulador de ON_UPDATE_COMMAND_UI com a ID de comando de todos os botões que tem uma ID >= um 0x8000 (isto é, no intervalo de IDs de comando).

O manipulador de ON_UPDATE_COMMAND_UI pode chamar:

  • Habilitar: para habilitar ou desabilitar o botão.

  • SetText: para alterar o texto do botão.

A personalizaçaõ pode ser feita por meio das APIs padrão do gerenciador de janela.

Consulte também

Outros recursos

Observações técnicas por número

Observações técnicas por categoria