TN031: Barras de controle
Observação |
---|
A seguinte nota técnica não foi atualizada desde que foi incluída pela primeira vez na documentação online.Como resultado, alguns procedimentos e tópicos podem estar desatualizado ou incorreto.As informações mais recentes, é recomendável que você procure o tópico de interesse no índice de documentação on-line. |
Esta anotação descreve as classes de barra de controle no MFC: general CControlBar, CStatusBar, CToolBar, CDialogBar, e CDockBar.
CControlBar
A ControlBar é um CWnd-derivadas de classes que:
É alinhado na parte superior ou inferior de uma janela do quadro.
Pode conter itens filho de um dos controles baseados em HWND (por exemplo, CDialogBar) ou não-HWND com base em itens (por exemplo, CToolBar, CStatusBar).
Barras de controle suportam para estilos adicionais:
CBRS_TOP(Padrão) fixa a barra de controle na parte superior.
CBRS_BOTTOMFixa a barra de controle na parte inferior.
CBRS_NOALIGNNão reposicione a barra de controle quando o pai é redimensionado.
Classes derivadas de CControlBar fornecem implementações mais interessantes:
CStatusBarUma barra de status, os itens são painéis de barra de status, que contém texto.
CToolBarUma barra de ferramentas, os itens são alinhados em uma linha de botões de bitmap.
CDialogBarUm quadro semelhante a barra de ferramentas contendo windows padrão controles (criados de um recurso de modelo de diálogo).
CDockBar a generalizada encaixe área para outros CControlBar derivado de objetos.As funções de membro específico e variáveis disponíveis nesta classe são provavelmente mudar em versões futuras.
Controle todos os objetos de barra/windows será janelas filho de alguma janela de quadro pai.Eles geralmente são adicionados como um irmão para a área cliente do quadro (por exemplo, um cliente MDI ou exibir).A identificação de janela filho de uma barra de controle é importante.O layout padrão da barra de controle funciona apenas para as barras de controle com identificações no intervalo de AFX_IDW_CONTROLBAR_FIRST para AFX_IDW_CONTROLBAR_LAST.Observe que, embora haja um intervalo de controle 256 barra identificações, o primeiro 32 da barra de controle IDs são especiais desde que eles são diretamente suportados pela arquitetura de visualização de impressão.
O CControlBar classe fornece uma implementação padrão para:
Alinhamento da barra de controle na parte superior, inferior ou laterais do quadro.
Alocando item matrizes de controle.
Suporte a implementação de classes derivadas.
Objetos de barra de controle do C++ geralmente serão incorporados como membros de um CFrameWnd classe derivada e será limpo quando o pai HWND e objeto são destruídos.Se você precisar alocar um objeto de barra de controle na pilha, você pode simplesmente definir o m_bAutoDestruct membro para TRUE para tornar a barra de controle "Excluir esta" quando o HWND é destruído.
Observação |
---|
Se você criar seu próprio CControlBar-derivado classe, em vez de usando um do MFC derivadas de classes, como CStatusBar, CToolBar, ou CDialogBar, você precisará definir o m_dwStyle membro de dados.Isso pode ser feito na substituição do criar: |
// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create( CWnd* pParentWnd, DWORD dwStyle, UINT nID )
{
m_dwStyle = dwStyle;
.
.
.
}
Algoritmo de Layout de barra de controle
O algoritmo de layout de barra de controle é muito simple.A janela do quadro envia uma mensagem WM_SIZEPARENT a todos os filhos do intervalo da barra de controle.Juntamente com esta mensagem, é passado um ponteiro para o retângulo de cliente do pai.Esta mensagem é enviada para crianças na ordem Z.Os filhos de barra de controle usarem essas informações para se posicionar e diminuir o tamanho da área de cliente do pai.O retângulo final esquerdo da área cliente normal (menos barras de controle) é usado para posicionar a janela principal do cliente (geralmente um cliente, exibir ou divisor janela MDI).
Consulte CWnd::RepositionBars e CFrameWnd::RecalcLayout para obter mais detalhes.
Particulares mensagens do Windows MFC, incluindo WM_SIZEPARENT, documentado no técnico Observação 24.
CStatusBar
Uma barra de status é uma barra de controle que tem uma linha de painéis de saída de texto.Há duas maneiras de usar painéis de saída de texto:
Como uma linha de mensagem
(por exemplo, o menu padrão ajudar linha de mensagem).Eles normalmente são acessados por um indexado baseado em 0
Como indicadores de status
(por exemplo, os CAP, NUM e tecla Scroll Lock indicadores).Eles normalmente são acessados por ID de comando/seqüência.
A fonte para a barra de status é 10 pontos MS Sans Serif (determinado pelo guia de Design de aplicativo de Interface do Windows ou a fonte mappers melhor correspondência de uma fonte proporcional Suíça de 10 pontos).Em determinadas versões do Windows, como a edição em japonês, as fontes selecionadas são diferentes.
As cores usadas na barra de status também são consistentes com a recomendação do guia de Design de aplicativo do Windows Interface.Essas cores não são codificadas e são alteradas dinamicamente em resposta a personalização do usuário no painel de controle.
Item |
Valor de cor Windows |
Padrão RGB |
---|---|---|
Fundo da barra de status |
COLOR_BTNFACE |
RGB (192, 192, 192) |
Texto da barra de status |
COLOR_BTNTEXT |
RGB (000 000, 000) |
Status da barra superior/esquerda bordas |
COLOR_BTNHIGHLIGHT |
RGB (255, 255, 255) |
Status da barra de bordas de bot/direito |
COLOR_BTNSHADOW |
RGB (128, 128, 128) |
Suporte a CCmdUI CStatusBar
A forma de indicadores são atualizados normalmente é por meio de ON_UPDATE_COMMAND_UI mecanismo.No tempo ocioso, a barra de status irá chamar o ON_UPDATE_COMMAND_UI manipulador com a ID de seqüência de caracteres do painel de indicador.
O ON_UPDATE_COMMAND_UI manipulador pode chamar:
Habilitar: ativar ou desativar o painel.Um painel desativado se parece exatamente com um painel ativado, mas o texto é invisível (isto é, desativa o indicador texto).
SetText: para alterar o texto.Tenha cuidado se você usar isso porque o painel não será redimensionada automaticamente.
Consulte a classe CStatusBar na Referência de biblioteca de classe para obter detalhes sobre CStatusBar criação e personalização APIs.A maioria dos personalização de barras de status deve ser feita antes que a barra de status é inicialmente feita visível.
A barra de status suporta apenas um painel alongado, geralmente o primeiro painel.O tamanho do painel que é realmente um tamanho mínimo.Se a barra de status é maior que o tamanho mínimo de todos os painéis, qualquer largura extra terá painel alongado.O aplicativo padrão com uma barra de status tem indicadores alinhado à direita para CAP, NUM e tecla SCROLL LOCK desde o primeiro painel é alongado.
CToolBar
Uma barra de ferramentas é uma barra de controle com uma linha de botões de bitmap podem incluir separadores.Há suporte para dois estilos de botões: pushbuttons e botões da caixa de seleção.Funcionalidade de grupo de rádio pode ser montada com botões de caixa de seleção e ON_UPDATE_COMMAND_UI.
Todos os botões de bitmap na barra de ferramentas são tirados 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 eles serão desenhados na tela.(Isso pode ser alterado usando a personalização APIs.)
Cada botão deve ser do mesmo tamanho.O padrão é os padrão 24 x 22 pixels.Cada imagem/glifo deve ser do mesmo tamanho e deve estar lado a lado no bitmap.O tamanho de imagem/glifo padrão é 15 x 16 pixels.Portanto, uma barra de ferramentas com 10 botões (usando tamanhos padrão), você precisa de um bitmap é 160 pixels de largura e 15 pixels de altura.
Cada botão possui somente uma imagem/glifo.Estados de botão diferente e estilos (por exemplo, pressionado, up, down, desativado, desabilitado para baixo, indeterminado) era gerados do que uma imagem/glifo.Qualquer bitmap de cor ou DIB pode ser usado na teoria.O algoritmo para gerar outro botão informa funciona melhor se a imagem original for tons de cinza.Examine os botões da barra de ferramentas padrão e o clipart de botão de barra de ferramentas fornecidas na MFC geral exemplo CLIPART para obter exemplos.
As cores usadas na barra de ferramentas também são consistentes com a recomendação do guia de Design de aplicativo do Windows Interface.Essas cores não são codificadas e são alteradas dinamicamente em resposta a personalização do usuário no painel de controle.
Item |
Valor de cor Windows |
Padrão RGB |
---|---|---|
Plano de fundo da barra de ferramentas |
COLOR_BTNFACE |
RGB(192,192,192) |
Botões de barra de ferramentas bordas superior/esquerdo |
COLOR_BTNHIGHLIGHT |
RGB(255,255,255) |
Barra de ferramentas botões bordas de bot/direito |
COLOR_BTNSHADOW |
RGB(128,128,128) |
Além disso, os botões de bitmap são recoloridos como se fossem controles de botão padrão do Windows.Este Recolorir ocorre quando o bitmap é carregado do recurso e, em resposta a uma alteração de cores do sistema em resposta a personalização do usuário no painel de controle.As seguintes cores em um bitmap da barra de ferramentas serão recoloridas automaticamente para que eles devem ser usados com cuidado.Se não desejar que uma parte do seu bitmap recolorido, use uma cor que se aproxime mais um dos valores RGB mapeados.O mapeamento é feito com base em valores RGB exatos.
Valor RGB |
Valor de cor mapeado dinamicamente |
---|---|
RGB (000 000, 000) |
COLOR_BTNTEXT |
RGB (128, 128, 128) |
COLOR_BTNSHADOW |
RGB (192, 192, 192) |
COLOR_BTNFACE |
RGB (255, 255, 255) |
COLOR_BTNHIGHLIGHT |
Consulte a classe CToolBar a Referência de biblioteca de classe para obter detalhes sobre o CToolBar criação e personalização APIs.A maioria dos personalização de barras de ferramentas deve ser feita antes que a barra de ferramentas é inicialmente feita visível.
A personalização APIs podem ser usadas para ajustar o botão identificações, estilos, largura de espaçador e qual imagem/glifo é usado para o botão.Por padrão você não precisará usar essas APIs.
Suporte a CCmdUI CToolBar
É a maneira como os botões da barra de ferramentas são sempre atualizadas por meio de ON_UPDATE_COMMAND_UI mecanismo.No tempo ocioso, a barra de ferramentas irá chamar o ON_UPDATE_COMMAND_UI manipulador com a ID de comando do botão.ON_UPDATE_COMMAND_UInão é chamado para separadores, mas ela é chamada para pushbuttons e botões de caixa de seleção.
O ON_UPDATE_COMMAND_UI manipulador pode chamar:
Habilitar: ativar ou desativar o botão.Isso funciona igualmente para pushbuttons e botões da caixa de seleção.
SetCheck: Para definir o estado de seleção de um botão.Chamar isso de um botão da barra de ferramentas será transformá-lo em um botão de caixa de seleção.SetCheckObtém um parâmetro que pode ser 0 (não marcado), 1 (marcado) ou 2 (indeterminado)
SetRadio: Forma abreviada de SetCheck.
Caixa de seleção botões é "AUTO" caixa de seleção; Isto é, quando o usuário pressiona-los eles imediatamente alterar estado.Verificado é o estado pressionado ou para baixo.Não há nenhuma maneira de interface de usuário internas para alterar um botão no estado "indeterminado"; que deve ser feito por meio de código.
A personalização APIs permitirá que você alterar o estado de um determinado botão, preferencialmente, você deve alterar esses estados de ON_UPDATE_COMMAND_UI manipulador para o comando que representa o botão de barra de ferramentas.Lembre-se o processamento ocioso irá alterar o estado dos botões da barra de ferramentas com o ON_UPDATE_COMMAND_UI manipulador, portanto, quaisquer alterações desses estados feitas por meio de SetButtonStyle podem obter perdidas após a próxima ocioso.
Botões da barra de ferramentas enviará WM_COMMAND mensagens como botões normal ou itens de menu e normalmente são manipuladas por um ON_COMMAND manipulador na mesma classe que fornece o ON_UPDATE_COMMAND_UI manipulador.
Há quatro ferramentas botão estilos (valores TBBS_) usados para estados de exibição:
TBBS_CHECKED: caixa de seleção é marcada atualmente (para baixo).
TBBS_INDETERMINATE: caixa de seleção está desativada no momento.
TBBS_DISABLED: Botão está desativado.
TBBS_PRESSED: Botão é pressionado no momento.
Os seis estilos de botão guia de Design de aplicativo do Windows Interface oficiais são representados por valores TBBS a seguir:
Up = 0
Mouse para baixo = TBBS_PRESSED (| qualquer outro estilo)
Disabled = TBBS_DISABLED
Para baixo = TBBS_CHECKED
Para baixo desativado = TBBS_CHECKED | TBBS_DISABLED
Indeterminado = TBBS_INDETERMINATE
CDialogBar
Uma barra de diálogo é uma barra de controle que contém controles padrão do Windows.Ele funciona como uma caixa de diálogo que contém os controles e oferece suporte a navegação por TAB entre elas.Ele também funciona como uma caixa de diálogo que utiliza um modelo de diálogo para representar a barra.
A CDialogBar é usado para a barra de ferramentas Visualizar impressão, que contém controles de botão de pressão padrão.
Usando um CDialogBar é como usar um CFormView.Você deve definir um modelo de diálogo para a barra de diálogo e remover todos os estilos, exceto estilo.Observe que a caixa de diálogo não deve ser visível.
As notificações de controle para um CDialogBar serão enviadas para o pai da barra de controle (como botões da barra de ferramentas).
Suporte a CCmdUI CDialogBar
Botões da barra de diálogo devem ser atualizado por meio de ON_UPDATE_COMMAND_UI mecanismo de manipulador.No tempo ocioso, a barra de diálogo chamará o ON_UPDATE_COMMAND_UI manipulador com a ID de comando de todos os botões que possuem uma identificação > 0x8000 (isto é, no intervalo de IDs de comando).
O ON_UPDATE_COMMAND_UI manipulador pode chamar:
Habilitar: para ativar ou desativar o botão.
SetText: para alterar o texto do botão.
Personalização pode ser feita por meio de APIs do Gerenciador de janela padrão.