Compartilhar via


Passo a passo: colocando controles nas barras de ferramentas

Este artigo descreve como adicionar um botão de barra de ferramentas que contém um controle do Windows a uma barra de ferramentas. No MFC, um botão de barra de ferramentas deve ser uma classe derivada da CMFCToolBarButton Classe, por exemplo CMFCToolBarComboBoxButton Classe, CMFCToolBarEditBoxButton Classe, CMFCDropDownToolbarButton Classe ou CMFCToolBarMenuButton Classe.

Adicionando controles a barras de ferramentas

Para adicionar um controle a uma barra de ferramentas, siga estas etapas:

  1. Reserve uma ID do recurso fictícia para o botão no recurso da barra de ferramentas pai. Para obter mais informações sobre como criar botões usando o Editor de Barras de Ferramentas no Visual Studio, consulte o artigo do Editor de Barras de Ferramentas .

  2. Reserve uma imagem da barra de ferramentas (ícone de botão) para o botão em todos os bitmaps da barra de ferramentas pai.

  3. No manipulador de mensagens que processa a AFX_WM_RESETTOOLBAR mensagem, execute as seguintes etapas:

    1. Construa o controle de botão usando uma CMFCToolbarButtonclasse derivada.

    2. Substitua o botão fictício pelo novo controle usando CMFCToolBar::ReplaceButton. Você pode construir o objeto de botão na pilha, pois ReplaceButton copia o objeto de botão e mantém a cópia.

Observação

Se você habilitou a personalização em seu aplicativo, talvez seja necessário redefinir a barra de ferramentas usando o botão Redefinir na guia Barras de Ferramentas da caixa de diálogo Personalizar para ver o controle atualizado em seu aplicativo após a recompilação. O estado da barra de ferramentas é salvo no Registro do Windows e as informações do Registro são carregadas e aplicadas depois que o ReplaceButton método é executado durante a inicialização do aplicativo.

Controles e personalização da barra de ferramentas

A guia Comandos da caixa de diálogo Personalizar contém uma lista de comandos disponíveis no aplicativo. Por padrão, a caixa de diálogo Personalizar processa os menus do aplicativo e cria uma lista de botões da barra de ferramentas padrão em cada categoria de menu. Para manter a funcionalidade estendida que os controles da barra de ferramentas fornecem, substitua o botão da barra de ferramentas padrão pelo controle personalizado na caixa de diálogo Personalizar .

Ao habilitar a personalização, você cria a caixa de diálogo Personalizar no manipulador OnViewCustomize de personalização usando a CMFCToolBarsCustomizeDialog classe Class . Antes de exibir a caixa de diálogo Personalizar chamando CMFCToolBarsCustomizeDialog::Create, chame CMFCToolBarsCustomizeDialog::ReplaceButton para substituir o botão padrão pelo novo controle.

Exemplo: criar uma caixa de combinação Localizar

Esta seção descreve como criar um controle de caixa de combinação Localizar que aparece em uma barra de ferramentas e contém cadeias de caracteres de pesquisa usadas recentemente. O usuário pode digitar uma cadeia de caracteres no controle e pressionar a tecla Enter para pesquisar um documento ou pressionar a tecla de escape para retornar o foco ao quadro principal. Este exemplo pressupõe que o documento seja exibido em uma visão derivada de uma CEditView classe.

Criando o controle Localizar

Primeiro, crie o controle da caixa de combinação Localizar:

  1. Adicione o botão e seus comandos aos recursos do aplicativo:

    1. Nos recursos do aplicativo, adicione um novo botão com uma ID_EDIT_FIND ID de comando a uma barra de ferramentas em seu aplicativo e a quaisquer bitmaps associados à barra de ferramentas.

    2. Crie um novo item de menu com a ID do ID_EDIT_FIND comando.

    3. Adicione uma nova cadeia de caracteres "Find the text\nFind" à tabela de cadeia de caracteres e atribua uma ID_EDIT_FIND_COMBO ID de comando. Esse ID será usado como o ID de comando do botão da caixa de combinação Localizar.

      Observação

      Como ID_EDIT_FIND é um comando padrão que é processado por CEditView, você não é obrigado a implementar um manipulador especial para esse comando. No entanto, você deve implementar um manipulador para o novo comando ID_EDIT_FIND_COMBO.

  2. Crie uma nova classe, CFindComboBoxderivada da CComboBox Classe.

  3. Na classe CFindComboBox, substitua o método virtual PreTranslateMessage. Esse método habilitará a caixa de combinação a processar a mensagem WM_KEYDOWN. Se o usuário atingir a tecla de escape (VK_ESCAPE), retorne o foco para a janela de quadro principal. Se o usuário pressionar a tecla Enter (VK_ENTER), poste uma mensagem na janela principal que contenha o ID do comando WM_COMMAND.

  4. Crie uma classe para o botão da caixa de combinação Localizar, derivada de CMFCToolBarComboBoxButton Classe. Neste exemplo, ele é nomeado CFindComboButton.

  5. O construtor de CMFCToolbarComboBoxButton usa três parâmetros: a ID de comando do botão, o índice de imagem do botão e o estilo da caixa de combinação. Defina estes parâmetros da seguinte maneira:

    1. Passe a ID_EDIT_FIND_COMBO como a ID de comando.

    2. Use CCommandManager::GetCmdImage com ID_EDIT_FIND para obter o índice de imagem.

    3. Para obter uma lista de estilos de caixa de combinação disponíveis, consulte Estilos de caixa de combinação.

  6. Na classe CFindComboButton, substitua o método CMFCToolbarComboBoxButton::CreateCombo. Aqui, você deve criar o objeto CFindComboButton e retornar um ponteiro para ele.

  7. Use a IMPLEMENT_SERIAL macro para tornar o botão de combinação persistente. O gerenciador de workspaces carrega e salva automaticamente o estado do botão no Registro do Windows.

  8. Implementar o manipulador ID_EDIT_FIND_COMBO no modo de exibição do documento. Use CMFCToolBar::GetCommandButtons com ID_EDIT_FIND_COMBO para recuperar todos os botões das caixas de combinação Find. Pode haver várias cópias de um botão com a mesma ID de comando devido à personalização.

  9. No ID_EDIT_FIND manipulador de mensagens OnFind, use CMFCToolBar::IsLastCommandFromButton para determinar se o comando Localizar foi enviado do botão da caixa de combinação Localizar. Nesse caso, localize o texto e adicione a cadeia de caracteres de pesquisa à caixa de combinação.

Adicionando o controle Localizar à barra de ferramentas principal

Para adicionar o botão caixa de combinação à barra de ferramentas, siga estas etapas:

  1. Implemente o AFX_WM_RESETTOOLBAR manipulador de mensagens OnToolbarReset na janela de quadro principal.

    Observação

    A estrutura envia essa mensagem para a janela de quadro principal quando uma barra de ferramentas é inicializada durante a inicialização do aplicativo ou quando uma barra de ferramentas é redefinida durante a personalização. Em ambos os casos, você deve substituir o botão de barra de ferramentas padrão pelo botão de caixa de combinação Localizar personalizado.

  2. No manipulador AFX_WM_RESETTOOLBAR, examine o ID da barra de ferramentas, ou seja, o WPARAM da mensagem AFX_WM_RESETTOOLBAR. Se o ID da barra de ferramentas for igual ao da barra de ferramentas que contém a caixa de combinação do botão Localizar, chame CMFCToolBar::ReplaceButton para substituir o botão Localizar (ou seja, o botão com o ID de comando ID_EDIT_FIND) por um objeto CFindComboButton.

    Observação

    Você pode construir um objeto CFindComboBox na pilha, pois ReplaceButton copia o objeto de botão e mantém a cópia.

Adicionar o controle Localizar à caixa de diálogo Personalizar

No manipulador de personalização OnViewCustomize, chame CMFCToolBarsCustomizeDialog::ReplaceButton para substituir o botão Localizar (ou seja, o botão com a ID do comando ID_EDIT_FIND) por um objeto CFindComboButton.

Consulte também

Gráfico da hierarquia
Classes
Classe CMFCToolBar
Classe CMFCToolBarButton
Classe CMFCToolBarComboBoxButton
Classe CMFCToolBarsCustomizeDialog