Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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:
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 .
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
AFX_WM_RESETTOOLBARmensagem, execute as seguintes etapas:Construa o controle de botão usando uma
CMFCToolbarButtonclasse derivada.Substitua o botão fictício pelo novo controle usando
CMFCToolBar::ReplaceButton. Você pode construir o objeto de botão na pilha, poisReplaceButtoncopia 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:
Adicione o botão e seus comandos aos recursos do aplicativo:
Nos recursos do aplicativo, adicione um novo botão com uma
ID_EDIT_FINDID de comando a uma barra de ferramentas em seu aplicativo e a quaisquer bitmaps associados à barra de ferramentas.Crie um novo item de menu com a ID do
ID_EDIT_FINDcomando.Adicione uma nova cadeia de caracteres
"Find the text\nFind"à tabela de cadeia de caracteres e atribua umaID_EDIT_FIND_COMBOID 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 porCEditView, você não é obrigado a implementar um manipulador especial para esse comando. No entanto, você deve implementar um manipulador para o novo comandoID_EDIT_FIND_COMBO.
Crie uma nova classe,
CFindComboBoxderivada daCComboBoxClasse.Na classe
CFindComboBox, substitua o método virtualPreTranslateMessage. Esse método habilitará a caixa de combinação a processar a mensagemWM_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 comandoWM_COMMAND.Crie uma classe para o botão da caixa de combinação Localizar, derivada de
CMFCToolBarComboBoxButtonClasse. Neste exemplo, ele é nomeadoCFindComboButton.O construtor de
CMFCToolbarComboBoxButtonusa 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:Passe a
ID_EDIT_FIND_COMBOcomo a ID de comando.Use
CCommandManager::GetCmdImagecomID_EDIT_FINDpara 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 objetoCFindComboButtone retornar um ponteiro para ele.Use a
IMPLEMENT_SERIALmacro 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_COMBOno modo de exibição do documento. UseCMFCToolBar::GetCommandButtonscomID_EDIT_FIND_COMBOpara 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.No
ID_EDIT_FINDmanipulador de mensagensOnFind, useCMFCToolBar::IsLastCommandFromButtonpara 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:
Implemente o
AFX_WM_RESETTOOLBARmanipulador de mensagensOnToolbarResetna 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.
No manipulador
AFX_WM_RESETTOOLBAR, examine o ID da barra de ferramentas, ou seja, oWPARAMda mensagemAFX_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, chameCMFCToolBar::ReplaceButtonpara substituir o botão Localizar (ou seja, o botão com o ID de comandoID_EDIT_FIND) por um objetoCFindComboButton.Observação
Você pode construir um objeto
CFindComboBoxna pilha, poisReplaceButtoncopia 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