Compartilhar via


Encaixando e flutuando barras de ferramentas

A biblioteca Microsoft Foundation Class dá suporte a barras de ferramentas encaixáveis. Uma barra de ferramentas encaixável pode ser anexada, ou encaixada, em qualquer lado de sua janela pai, ou pode ser desanexada, ou deixada flutuando, em sua própria minimoldura. Este artigo explica como usar barras de ferramentas encaixáveis em seus aplicativos.

Se você usar o Assistente de Aplicativo para gerar o esqueleto do aplicativo, será solicitado a escolher se deseja barras de ferramentas encaixáveis. Por padrão, o Assistente de Aplicativo gera o código que executa as três ações necessárias para colocar uma barra de ferramentas encaixável em seu aplicativo:

Se alguma dessas etapas estiver ausente, seu aplicativo exibirá uma barra de ferramentas padrão. As duas últimas etapas devem ser executadas para cada barra de ferramentas encaixável em seu aplicativo.

Outros tópicos abordados neste artigo incluem:

Consulte o exemplo geral do MFC DOCKTOOL para obter exemplos.

Habilitar o encaixe em uma janela de quadro

Para encaixar barras de ferramentas em uma janela de quadro, a janela de quadro (ou de destino) deve estar habilitada para permitir o encaixe. Isso é feito usando a função CFrameWnd::EnableDocking, que usa um parâmetro DWORD que é um conjunto de bits de estilo que indica qual lado da janela de quadro aceita o encaixe. Se uma barra de ferramentas estiver prestes a ser encaixada e houver vários lados nos quais ela possa ser encaixada, os lados indicados no parâmetro passado para EnableDocking serão usados na seguinte ordem: superior, inferior, esquerda, direita. Se você quiser conseguir encaixar barras de controle em qualquer lugar, passe CBRS_ALIGN_ANY para EnableDocking.

Habilitar o encaixe para uma barra de ferramentas

Depois de preparar o destino para o encaixe, você deve preparar a barra de ferramentas (ou de origem) de maneira semelhante. Chame CControlBar::EnableDocking para cada barra de ferramentas que você deseja encaixar, especificando os lados do destino aos quais a barra de ferramentas deve encaixar. Se nenhum dos lados especificados na chamada para CControlBar::EnableDocking corresponder aos lados habilitados para encaixe na janela de quadro, a barra de ferramentas não poderá encaixar — ela flutuará. Depois de flutuar, ele permanecerá uma barra de ferramentas flutuante, não podendo encaixar na janela de quadro.

Se o efeito desejado for uma barra de ferramentas permanentemente flutuante, chame EnableDocking com um parâmetro de 0. Em seguida, chame CFrameWnd::FloatControlBar. A barra de ferramentas permanece flutuante, permanentemente incapaz de ser encaixada em qualquer lugar.

Encaixar a barra de ferramentas

A estrutura chama CFrameWnd::DockControlBar quando o usuário tenta soltar a barra de ferramentas em um lado da janela de quadro que permite o encaixe.

Além disso, você pode chamar essa função a qualquer momento para encaixar barras de controle na janela de quadro. Normalmente, isso é feito durante a inicialização. Mais de uma barra de ferramentas pode ser encaixada em um lado específico da janela de quadro.

Flutuar a barra de ferramentas

Desanexar uma barra de ferramentas encaixada da janela de quadro é chamado flutuar a barra de ferramentas. Chame CFrameWnd::FloatControlBar para fazer isso. Especifique a barra de ferramentas a flutuar, o ponto em que ela deve ser colocada e um estilo de alinhamento que determina se a barra de ferramentas flutuante é horizontal ou vertical.

A estrutura chama essa função quando um usuário arrasta uma barra de ferramentas para fora de seu local de encaixe e a solta em um local onde o encaixe não está habilitado. Isso pode ser em qualquer lugar dentro ou fora da janela de quadro. Assim como acontece com DockControlBar, você também pode chamar essa função durante a inicialização.

A implementação do MFC de barras de ferramentas encaixáveis não fornece alguns dos recursos estendidos encontrados em alguns aplicativos que dão suporte a barras de ferramentas encaixáveis. Recursos como barras de ferramentas personalizáveis não são fornecidos.

Redimensionar dinamicamente a barra de ferramentas

A partir do Visual C++ versão 4.0, você pode tornar possível que os usuários do aplicativo redimensionem dinamicamente barras de ferramentas flutuantes. Normalmente, uma barra de ferramentas tem uma forma longa e linear e é exibida horizontalmente. Mas você pode alterar a orientação da barra de ferramentas e sua forma. Por exemplo, quando o usuário encaixa uma barra de ferramentas em um dos lados verticais da janela de quadro, a forma muda para um layout vertical. Também é possível remodelar a barra de ferramentas em um retângulo com várias linhas de botões.

Você poderá:

  • Especificar o dimensionamento dinâmico como uma característica da barra de ferramentas.

  • Especificar o dimensionamento fixo como uma característica da barra de ferramentas.

Para fornecer esse suporte, há dois novos estilos de barra de ferramentas para uso em suas chamadas para a função membro CToolBar::Create. Eles são:

  • CBRS_SIZE_DYNAMIC A barra de controle é dinâmica.

  • CBRS_SIZE_FIXED A barra de controle é fixa.

O estilo dinâmico de tamanho permite que o usuário redimensione a barra de ferramentas enquanto ela estiver flutuando, mas não enquanto ela estiver encaixada. A barra de ferramentas "encapsula" onde for necessário para alterar a forma à medida que o usuário arrasta suas bordas.

O estilo fixo de tamanho preserva os estados de encapsulamento de uma barra de ferramentas, corrigindo a posição dos botões em cada coluna. O usuário do aplicativo não pode alterar a forma da barra de ferramentas. A barra de ferramentas encapsula em locais designados, como os locais de separadores entre os botões. Ele mantém essa forma se a barra de ferramentas está encaixada ou flutuante. O efeito é uma paleta fixa com várias colunas de botões.

Você também pode usar CToolBar::GetButtonStyle para retornar um estado e um estilo para os botões em suas barras de ferramentas. O estilo de um botão determina como ele aparece e como ele responde à entrada do usuário; o estado informa se o botão está em um estado encapsulado.

Configurar posições de encapsulamento para uma barra de ferramentas de estilo fixo

Para uma barra de ferramentas com o estilo de tamanho fixo, designe índices de botão de barra de ferramentas nos quais ela será encapsulada. O código a seguir mostra como fazer isso na substituição OnCreate da janela de quadro principal:

// Get the style of the first button separator
UINT nStyle = m_wndToolBar.GetButtonStyle(3);
// Augment the state for wrapping
nStyle |= TBBS_WRAPPED;
m_wndToolBar.SetButtonStyle(3, nStyle);

// Do the same for other wrap locations ...

// Set the bar style to size fixed
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
   CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);

// Call docking/floating functions as needed ...

O exemplo geral do MFC DOCKTOOL mostra como usar as funções membro das classes CControlBar e CToolBar para gerenciar o layout dinâmico de uma barra de ferramentas. Consulte o arquivo EDITBAR.CPP no DOCKTOOL.

O que mais você deseja saber?

Confira também

Implementação da barra de ferramentas do MFC