Compartilhar 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.

  • Adicionar uma barra de ferramentas a uma janela de ferramenta.

  • 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 FirstToolWin 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 Me! .

  2. Na caixa de ferramentas, expanda a seção Todos os controles WPF e arraste o controle Media Element para o formulário FirstToolWindowControl. Selecione o controle e, na janela Propriedades, nomeie esse elemento mediaElement1.

Adicionar uma barra de ferramentas à janela de ferramentas

Ao adicionar uma barra de ferramentas da seguinte maneira, 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 .vsct define os elementos da interface gráfica do usuário (GUI) na janela da ferramenta usando XML.

  2. <Symbols> Na seção , localize o <GuidSymbol> nó cujo name atributo é guidFirstToolWindowPackageCmdSet. Adicione os dois <IDSymbol> elementos a seguir à lista de <IDSymbol> elementos 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, crie uma <Menus> seção semelhante a <Buttons> 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 type atributo. As guid configurações e id compõem a ID totalmente qualificada da barra de ferramentas. Normalmente, o de um menu é o <Parent> grupo que contém. No entanto, uma barra de ferramentas é definida como seu próprio pai. Portanto, o mesmo identificador é usado para os <Menu> elementos e <Parent> . O priority atributo é apenas '0'.

  4. As barras de ferramentas se assemelham aos menus de várias 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 <Groups> seção que contenha um <Group> elemento . Isso define o grupo cuja ID você declarou na <Symbols> seção . Adicione a seção logo após a <Groups><Menus> seção.

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

    Ao definir o GUID pai e o ID para o GUID e o 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 é exibida como um botão.

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

    <IDSymbol name="cmdidWindowsMedia" value="0x0100" />
    <IDSymbol name="cmdidWindowsMediaOpen" value="0x132" />
    
  2. Adicione um elemento Button dentro da <Buttons> seção. Esse elemento aparecerá na barra de ferramentas na janela da ferramenta, com um ícone Pesquisar (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 no 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 em FirstToolWindowControl.xaml, clique em Exibir Código e adicione o seguinte código à classe FirstToolWindowControl.

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

Instanciar a janela de ferramentas 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 using diretivas:

    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 de ferramentas

  1. Na classe FirstToolWindowCommand, adicione um método ButtonHandler que invoca a caixa de diálogo Abrir arquivo . 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 comandos 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 de ferramenta

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

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

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

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

    Observação

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

Testar a janela de ferramentas

  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, em seguida, clique em Primeira janela de ferramenta .

    A janela da ferramenta do media player deve ser aberta na mesma posição que o Gerenciador de Soluções. Se ele ainda aparecer na mesma posição de antes, redefina o layout da janela (Janela / Redefinir layout da janela).

  3. Clique no botão (ele tem o ícone Pesquisar ) na janela da ferramenta. Selecione um arquivo de som ou vídeo com suporte, por exemplo, C:\windows\media\chimes.wav e pressione Abrir.

    Você deve ouvir o som do carrilhão.