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:
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.
Reserve uma imagem da barra de ferramentas (ícone de botão) para o botão em todos os bitmaps da barra de ferramentas pai.
No manipulador de mensagens que processa a mensagem
AFX_WM_RESETTOOLBAR
, execute as seguintes etapas:Construa o controle de botão usando uma classe derivada
CMFCToolbarButton
.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:
Adicione o botão e seus comandos aos recursos do aplicativo:
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.Criar um novo item de menu com a ID do comando
ID_EDIT_FIND
.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 porCEditView
, você não precisa implementar um manipulador especial para esse comando. No entanto, você deve implementar um manipulador para o novo comandoID_EDIT_FIND_COMBO
.
Criar uma nova classe,
CFindComboBox
, derivada da classe CComboBox.Na classe
CFindComboBox
, substitua o método virtualPreTranslateMessage
. 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 mensagemWM_COMMAND
que contém a ID de comandoID_EDIT_FIND_COMBO
.Crie uma classe para o botão de caixa de combinação Localizar, derivado da Classe CMFCToolBarComboBoxButton. Neste exemplo, o nome usado é
CFindComboButton
.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:Passe a
ID_EDIT_FIND_COMBO
como a ID de comando.Use CCommandManager::GetCmdImage com
ID_EDIT_FIND
para obter o índice de imagem.Para obter uma lista de estilos de caixa de combinação disponíveis, consulte Estilos de caixa de combinação.
Na classe
CFindComboButton
, substitua o métodoCMFCToolbarComboBoxButton::CreateCombo
. Aqui, você deve criar o objetoCFindComboButton
e retornar um ponteiro para ele.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.
Implementar o manipulador
ID_EDIT_FIND_COMBO
no modo de exibição do documento. Usar CMFCToolBar::GetCommandButtons paraID_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.No manipulador de mensagens
ID_EDIT_FIND
OnFind
, 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:
Implemente o manipulador de mensagens
AFX_WM_RESETTOOLBAR
OnToolbarReset
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.
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 comandoID_EDIT_FIND)
por um objetoCFindComboButton
.Observação
Você pode construir um objeto
CFindComboBox
na pilha, poisReplaceButton
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