Instruções passo a passo: colocando controles em 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 de Classe CMFCToolBarButton, por exemplo Classe CMFCToolBarComboBoxButton, Classe CMFCToolBarEditBoxButton, Classe CMFCDropDownToolbarButton ou Classe CMFCToolBarMenuButton.

Adicionar controles às 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 da barra de ferramentas no Visual Studio, consulte o artigo Editor da barra 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 mensagem AFX_WM_RESETTOOLBAR, execute as seguintes etapas:

    1. Construa o controle de botão usando uma classe derivada CMFCToolbarButton.

    2. Substitua o botão fictício pelo controle novo 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, é aconselhável 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 está salvo no registro do Windows e as informações do registro são carregadas e aplicadas depois que o método ReplaceButton é 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 que estão 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 de barra de ferramentas padrão em cada categoria de menu. Para manter a funcionalidade estendida que os controles da barra de ferramentas fornecem, você pode substituir o botão de 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 de personalização OnViewCustomize usando a classe CMFCToolBarsCustomizeDialog. Antes de exibir a caixa de diálogo Personalizar chamando CMFCToolBarsCustomizeDialog::Create, chame CMFCToolBarsCustomizeDialog::ReplaceButton para substituir o botão padrão pelo controle novo.

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 as 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 ESCAPE para retornar o foco para o quadro principal. Este exemplo considera que o documento seja exibido em uma exibição derivada de Classe CEditView.

Criar 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 de comando ID_EDIT_FIND a uma barra de ferramentas em seu aplicativo e a todos os bitmaps associados à barra de ferramentas.

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

    3. Adicione uma nova cadeia de caracteres "Localizar o texto\nLocalizar" à tabela da cadeia de caracteres e atribua uma ID de comando ID_EDIT_FIND_COMBO. Essa ID será usada como a ID de comando do botão de caixa de combinação Localizar.

      Observação

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

  2. Criar uma nova classe, CFindComboBox, derivada da classe CComboBox.

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

  4. Crie uma classe para o botão de caixa de combinação Localizar, derivado da Classe CMFCToolBarComboBoxButton. Neste exemplo, o nome usado é 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 conforme a seguir:

    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 macro IMPLEMENT_SERIAL 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. Usar CMFCToolBar::GetCommandButtons para ID_EDIT_FIND_COMBO recuperar todos os botões de caixa de combinação Localizar. Podem existir várias cópias de um botão com a mesma ID de comando devido à personalização.

  9. No manipulador de mensagens ID_EDIT_FINDOnFind, use CMFCToolBar::IsLastCommandFromButton para determinar se o comando localizar foi enviado do botão de caixa de combinação Localizar. Caso tenha sido enviado, localize o texto e adicione a cadeia de caracteres de pesquisa à caixa de combinação.

Adicionar o controle Localizar à barra de ferramentas principal

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

  1. Implemente o manipulador de mensagens AFX_WM_RESETTOOLBAROnToolbarReset na janela do quadro principal.

    Observação

    A estrutura envia essa mensagem para a janela do 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. Nos dois 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, revise a ID da barra de ferramentas, ou seja, o WPARAM da mensagem AFX_WM_RESETTOOLBAR. Se a ID da barra de ferramentas for igual à da barra de ferramentas que contém o botão da caixa de combinação Localizar, chame CMFCToolBar::ReplaceButton para substituir o botão Localizar (ou seja, o botão com a ID de comando ID_EDIT_FIND) por um objetoCFindComboButton.

    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 pela ID do comando ID_EDIT_FIND) por um objeto CFindComboButton.

Confira também

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