Partilhar via


Adicionar uma janela de ferramenta

Neste passo a passo, você aprenderá a criar uma janela de ferramenta e integrá-la ao Visual Studio das seguintes maneiras:

  • Adicione um controle à janela da ferramenta.

  • Adicione uma barra de ferramentas a uma janela de ferramentas.

  • Adicione um comando à barra de ferramentas.

  • Implemente os comandos.

  • Defina a posição padrão para a janela da ferramenta.

Pré-requisitos

O SDK do Visual Studio está incluído como um recurso opcional na instalação do Visual Studio. Para obter mais informações, consulte instalar o SDK do Visual Studio.

Criar uma janela de ferramenta

  1. Crie um projeto chamado FirstToolWindow usando o modelo VSIX e adicione um modelo de item de janela de ferramenta personalizado chamado FirstToolWindow.

    Observação

    Para obter mais informações sobre como criar uma extensão com uma janela de ferramenta, consulte Criar uma extensão com uma janela de ferramenta.

Adicionar um controle à janela da ferramenta

  1. Remova o controle padrão. Abra FirstToolWindowControl.xaml e exclua o botão Clique em mim!.

  2. Na Caixa de Ferramentas , expanda a secção Todos os Controles WPF e arraste o controlo Media Element para o formulário FirstToolWindowControl. Selecione o control, e na janela Propriedades, dê a este elemento o nome mediaElement1.

Adicionar uma barra de ferramentas à janela da ferramenta

Ao adicionar uma barra de ferramentas da maneira a seguir, você garante que seus gradientes e cores sejam consistentes com o restante do IDE.

  1. No Gerenciador de Soluções , abra FirstToolWindowPackage.vsct. O arquivo de .vsct define os elementos da interface gráfica do usuário (GUI) na janela da ferramenta usando XML.

  2. Na seção <Symbols>, localize o nó <GuidSymbol> cujo atributo name é guidFirstToolWindowPackageCmdSet. Adicione os seguintes dois elementos <IDSymbol> à lista de elementos <IDSymbol> neste nó para definir uma barra de ferramentas e um grupo de barras de ferramentas.

    <IDSymbol name="ToolbarID" value="0x1000" />
    <IDSymbol name="ToolbarGroupID" value="0x1001" />
    
  3. Logo acima da seção <Buttons>, crie uma seção <Menus> semelhante a esta:

    <Menus>
        <Menu guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" priority="0x0000" type="ToolWindowToolbar">
            <Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" />
            <Strings>
                <ButtonText>Tool Window Toolbar</ButtonText>
                <CommandName>Tool Window Toolbar</CommandName>
            </Strings>
        </Menu>
    </Menus>
    

    Existem vários tipos diferentes de menu. Este menu é uma barra de ferramentas em uma janela de ferramenta, definida por seu atributo type. As configurações guid e id compõem o ID totalmente qualificado da barra de ferramentas. Normalmente, a <Parent> de um menu é o grupo contenedor. No entanto, uma barra de ferramentas é definida como sendo sua própria mãe. Portanto, o mesmo identificador é usado para os elementos <Menu> e <Parent>. O atributo priority é apenas '0'.

  4. As barras de ferramentas assemelham-se a menus de muitas maneiras. Por exemplo, assim como um menu pode ter grupos de comandos, as barras de ferramentas também podem ter grupos. (Nos menus, os grupos de comandos são separados por linhas horizontais. Nas barras de ferramentas, os grupos não são separados por divisores visuais.)

    Adicione uma seção <Groups> que contenha um elemento <Group>. Isso define o grupo cuja ID você declarou na seção <Symbols>. Adicione a seção <Groups> logo após a seção <Menus>.

    <Groups>
        <Group guid="guidFirstToolWindowPackageCmdSet" id="ToolbarGroupID" priority="0x0000">
            <Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" />
        </Group>
    </Groups>
    

    Ao definir o GUID pai e ID para o GUID e ID da barra de ferramentas, você adiciona o grupo à barra de ferramentas.

Adicionar um comando à barra de ferramentas

Adicione um comando à barra de ferramentas, que é exibido como um botão.

  1. Na seção <Symbols>, declare os seguintes elementos IDSymbol logo após as declarações da barra de ferramentas e do grupo da barra de ferramentas.

    <IDSymbol name="cmdidWindowsMedia" value="0x0100" />
    <IDSymbol name="cmdidWindowsMediaOpen" value="0x132" />
    
  2. Adicione um elemento Button dentro da seção <Buttons>. Este elemento aparecerá na barra de ferramentas na janela da ferramenta, com um ícone de pesquisa (lupa) .

    <Button guid="guidFirstToolWindowPackageCmdSet" id="cmdidWindowsMediaOpen" priority="0x0101" type="Button">
        <Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarGroupID"/>
        <Icon guid="guidImages" id="bmpPicSearch" />
        <Strings>
            <CommandName>cmdidWindowsMediaOpen</CommandName>
            <ButtonText>Load File</ButtonText>
        </Strings>
    </Button>
    
  3. Abra FirstToolWindowCommand.cs e adicione as seguintes linhas na classe logo após os campos existentes.

    public const string guidFirstToolWindowPackageCmdSet = "00000000-0000-0000-0000-0000";  // get the GUID from the .vsct file
    public const uint cmdidWindowsMedia = 0x100;
    public const int cmdidWindowsMediaOpen = 0x132;
    public const int ToolbarID = 0x1000;
    

    Isso torna seus comandos disponíveis em código.

Adicionar uma propriedade MediaPlayer a FirstToolWindowControl

A partir dos manipuladores de eventos para os controles da barra de ferramentas, seu código deve ser capaz de acessar o controle Media Player, que é um filho da classe FirstToolWindowControl.

No Gerenciador de Soluções , clique com o botão direito do mouse FirstToolWindowControl.xaml , clique em View Codee adicione o seguinte código à classe FirstToolWindowControl.

public System.Windows.Controls.MediaElement MediaPlayer
{
    get { return mediaElement1; }
}

Instanciar a janela da ferramenta e a barra de ferramentas

Adicione uma barra de ferramentas e um comando de menu que invoque a caixa de diálogo Abrir arquivo e reproduza o arquivo de mídia selecionado.

  1. Abra FirstToolWindow.cs e adicione as seguintes diretivas using:

    using System.ComponentModel.Design;
    using System.Windows.Forms;
    using Microsoft.VisualStudio.Shell.Interop;
    
  2. Dentro da classe FirstToolWindow, adicione uma referência pública ao controle FirstToolWindowControl.

    public FirstToolWindowControl control;
    
  3. No final do construtor, defina essa variável de controle para o controle recém-criado.

    control = new FirstToolWindowControl();
    base.Content = control;
    
  4. Instancie a barra de ferramentas dentro do construtor.

    this.ToolBar = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet),
        FirstToolWindowCommand.ToolbarID);
    this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP;
    
  5. Neste ponto, o construtor FirstToolWindow deve ter esta aparência:

    public FirstToolWindow() : base(null)
    {
        this.Caption = "FirstToolWindow";
        this.BitmapResourceID = 301;
        this.BitmapIndex = 1;
        control = new FirstToolWindowControl();
        base.Content = control;
        this.ToolBar = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet),
            FirstToolWindowCommand.ToolbarID);
            this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP;
    }
    
  6. Adicione o comando de menu à barra de ferramentas. Na classe FirstToolWindowCommand.cs, adicione a seguinte diretiva using:

    using System.Windows.Forms;
    
  7. Na classe FirstToolWindowCommand, adicione o seguinte código no final do método ShowToolWindow(). O comando ButtonHandler será implementado na próxima seção.

    // Create the handles for the toolbar command.
    var mcs = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
    var toolbarbtnCmdID = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet),
        FirstToolWindowCommand.cmdidWindowsMediaOpen);
    var menuItem = new MenuCommand(new EventHandler(
        ButtonHandler), toolbarbtnCmdID);
    mcs.AddCommand(menuItem);
    

Para implementar um comando de menu na janela da ferramenta

  1. Na classe FirstToolWindowCommand, adicione um método ButtonHandler que invoque a caixa de diálogo Open File. Quando um arquivo é selecionado, ele reproduz o arquivo de mídia.

  2. Na classe FirstToolWindowCommand, adicione uma referência privada à janela FirstToolWindow que é criada no método FindToolWindow().

    private FirstToolWindow window;
    
  3. Altere o método ShowToolWindow() para definir a janela definida acima (para que o manipulador de comando ButtonHandler possa acessar o controle de janela. Aqui está o método ShowToolWindow() completo.

    private void ShowToolWindow(object sender, EventArgs e)
    {
        window = (FirstToolWindow) this.package.FindToolWindow(typeof(FirstToolWindow), 0, true);
        if ((null == window) || (null == window.Frame))
        {
            throw new NotSupportedException("Cannot create tool window");
        }
    
        IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;
        Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show());
    
        var mcs = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
        var toolbarbtnCmdID = new CommandID(new Guid(FirstToolWindowCommandguidFirstToolWindowPackageCmdSet),
            FirstToolWindowCommand.cmdidWindowsMediaOpen);
        var menuItem = new MenuCommand(new EventHandler(
            ButtonHandler), toolbarbtnCmdID);
        mcs.AddCommand(menuItem);
    }
    
  4. Adicione o método ButtonHandler. Ele cria um OpenFileDialog para o usuário especificar o arquivo de mídia a ser reproduzido e, em seguida, reproduz o arquivo selecionado.

    private void ButtonHandler(object sender, EventArgs arguments)
    {
        OpenFileDialog openFileDialog = new OpenFileDialog();
        DialogResult result = openFileDialog.ShowDialog();
        if (result == DialogResult.OK)
        {
            window.control.MediaPlayer.Source = new System.Uri(openFileDialog.FileName);
        }
    }
    

Definir a posição padrão para a janela da ferramenta

Em seguida, especifique um local padrão no IDE para a janela da ferramenta. As informações de configuração para a janela da ferramenta estão no arquivo FirstToolWindowPackage.cs.

  1. Em FirstToolWindowPackage.cs, localize o atributo ProvideToolWindowAttribute na classe FirstToolWindowPackage, que passa o tipo FirstToolWindow para o construtor. Para especificar uma posição padrão, deve adicionar mais parâmetros ao construtor, conforme o exemplo a seguir.

    [ProvideToolWindow(typeof(FirstToolWindow),
        Style = Microsoft.VisualStudio.Shell.VsDockStyle.Tabbed,
        Window = "3ae79031-e1bc-11d0-8f78-00a0c9110057")]
    

    O primeiro parâmetro nomeado é Style e seu valor é Tabbed, o que significa que a janela será uma guia em uma janela existente. A posição de encaixe é especificada pelo parâmetro Window, neste caso, o GUID do Solution Explorer.

    Observação

    Para obter mais informações sobre os tipos de janelas no IDE, consulte vsWindowType.

Testar a janela da ferramenta

  1. Pressione F5 para abrir uma nova instância da compilação experimental do Visual Studio.

  2. No menu Exibir, aponte para Outras Janelas e clique em Primeira Janela de Ferramentas.

    A janela da ferramenta media player deve abrir na mesma posição que Explorador de Soluções. Se ele ainda aparecer na mesma posição que antes, redefina o layout da janela (Window / Reset Window Layout).

  3. Clique no botão (que tem o ícone Pesquisar ) na janela da ferramenta. Selecione um ficheiro de som ou vídeo suportado, por exemplo, C:\windows\media\chimes.wave, em seguida, prima Abrir.

    Você deve ouvir o som do toque.