Compartilhar via


Como: fornecer os itens de caixa de ferramentas personalizada usando a Assemblies de interoperabilidade

Dica

A maneira recomendada para adicionar controles personalizados à caixa de ferramentas é usar os modelos de controle de caixa de ferramentas que vêm com o SDK de 10 Visual Studio.Este tópico é mantido somente para compatibilidade com versões anteriores e para adicionar controles existentes a caixa de ferramentas.

Para obter mais informações sobre a criação de controles da toolbox, usando os modelos, consulte Como: criar um controle de caixa de ferramentas que usa o Windows Forms e Como: criar um controle de caixa de ferramentas que utiliza WPF.

Um VSPackage com base em um assembly de interoperabilidade pode estender Visual Studiocaixa de ferramentas funcionalidade, adicionando controles de ActiveX. 

Para obter uma lista padrão de Visual Studio a formatos de área de transferência da caixa de ferramentas, consulte A caixa de ferramentas (Visual Studio SDK).

Para obter informações sobre como o VSPackage gerencia a caixa de ferramentas usando SDK do Visual Studio, consulte Gerenciando a caixa de ferramentas..

Para informações sobre como gerenciar o caixa de ferramentas por meio da automação, consulte Como controlar a Caixa de Ferramentas.

Procedimentos

Itens adicionados ao caixa de ferramentas deve implementar o padrão caixa de ferramentas formatos de área de transferência, a menos que o VSPackage adicionando itens atua como um Toolbox provedor do item — fornecendo suporte de implementação para o novo formato.

Para implementar o controle de caixa de ferramentas

  • A caixa de ferramentas item fornecido pelo VSPackage implementado em código não gerenciado ou deve implementar um IDataObject de objeto ou ser um controle ActiveX — do que o ambiente pode obter um IDataObject objeto.

    Para obter mais informações sobre como implementar a IDataObject objeto para dar suporte a caixa de ferramentas, consulte IDataObject, TBXITEMINFO, e FORMATETC.

Para adicionar controles baseados em assembly de interoperabilidade na caixa de ferramentas

  1. Obtenha as ocorrências de:

    1. IVsToolbox2, que oferece suporte à adição de controles e seções (guias) para o caixa de ferramentas e controlar outros aspectos do caixa de ferramentas configuração.

    2. IVsToolbox3, que oferece suporte para localização e Visual Studio a persistência de configurações.

    Dica

    O IVsToolbox2 interface herda o IVsToolbox interface.IVsToolbox3não é derivada de IVsToolbox2 e não implementa seus métodos.

    IVsToolbox3e IVsToolbox2 são obtidos chamando o QueryService método na SVsToolbox serviço usando a identificação do serviço de SID_SVsToolbox.

    A identificação da interface IID_IVSToolbox2 é usado para obter IVsToolbox2e a identificação IID_IVSToolbox3 retorna IVsToolbox3.

    No exemplo abaixo, o IVsToolbox2 interface é obtido com um QueryService e o IVsToolbox3 interface chamando QueryInterface sobre o IVsToolbox2 interface.

    extern CComModule _Module;
    CComPtr<IVsToolbox2> srpTbx2;
    CComPtr<IVsToolbox3> srpTbx3;
    hr = _Module.QueryService(SID_SVsToolbox, IID_IVsToolbox2, (void**) &srpTbx2));
    hr = srpTbx2->QueryInterface( IID_IVsToolbox3, (void **)&srpTbx3)
    
  2. Usar instâncias da IVsToolbox2 e o IVsToolbox3 interfaces para adicionar guias (seções) e os controles para o caixa de ferramentas.

    No exemplo abaixo, uma nova guia é adicionada com um nome localizado usando o AddTab método.

    Como esse nome localizado não é invariável, um nome invariável não-localizada (nesse caso L"HTML") é definida por uma chamada para o SetIDOfTab método.

    Se já existir na guia toolbox, AddTab2 retorna E_FAIL, no qual caso presume que a guia corretamente foi adicionada antes de uma tentativa é feito para recuperar o nome invariável.

    Se tiver sido adicionada com êxito uma guia, e em seguida, um IDataObject-com base do controle é adicionado à caixa de ferramentas; Caso contrário, será retornado um erro.

    CComBSTR sbstrID;
    hr = srpTbx2->AddTab2((WCHAR*)szwDisplayTabName, *pclsidPackage);
    if ( hr == S_OK) {
        sbstrID =L"HTML";
        hr = srpTbx3->SetIDOfTab( (WCHAR*)szwDisplayTabName, sbstrID);
    }else{
        hr = S_OK;
        hr = srpTbx3->GetIDOfTab( (WCHAR*)szwDisplayTabName, &sbstrID );
        
    }
    if ( hr = S_OK){
        hr=srpTbx2->AddItem(tbxItem, &tinfo, bstrLabel);
    }
    return hr;
    

Para além de adicionar à caixa de ferramentas propriamente dito, VSPackage pode ser configurado como um caixa de ferramentas provedor de dados e pode ser usado para estender o suporte de arrastar-e-soltar para o Visual Studio IDE. Isso permite que os formatos de área de transferência arbitrário a ser exposta ao caixa de ferramentas e editores.

Para configurar o VSPackage como um provedor de Item da caixa de ferramentas

  1. Registrar o VSPackage baseada em interoperabilidade, como um caixa de ferramentas provedor do item.

    Para obter mais informações sobre como registrar como um caixa de ferramentas provedor, consulte Registrar os recursos de suporte da caixa de ferramentas.

  2. Registre-se como personalizada de suporte caixa de ferramentas formatos da área de transferência.

    VSPackage baseada em interoperabilidade, suporte a controles que não implementam o padrão todos os caixa de ferramentas formatos de área de transferência ou implementar um personalizado caixa de ferramentas formato de área de transferência deve:

    1. Registre os formatos de área de transferência da caixa de ferramentas que dão suporte. Para obter mais informações, consulte Registrar os recursos de suporte da caixa de ferramentas.

    2. Criar uma classe de implementação do IVsToolboxDataProvider e IVsToolboxDataProvider2 interfaces.

      Dica

      O IVsToolboxDataProvider e IVsToolboxDataProvider2 não devem ser implementados interfaces da mesma classe que implementa o IVsPackage interface.

    3. Informar programaticamente a caixa de ferramentas que uma implementação específica da IVsToolboxDataProvider e IVsToolboxDataProvider2 interfaces oferece suporte para formatos de dados personalizados com um dos métodos equivalentes —RegisterDataProvider ou RegisterDataProvider.

      Chamar o RegisterDataProvider método geralmente é feito na implementação da SetSite método ou do OnCreate método do manipulador para quando o VSPackage se torna ativo.

        CComPtr<IVsToolboxDataProviderRegistry> pTB;
        if (SUCCEEDED (hr = pServiceProvider->QueryService(SID_SVsToolboxDataProviderRegistry, IID_IVsToolboxDataProviderRegistry, (PVOID*)&pTB)) && pTB != NULL)
        {
            CustToolboxDataProvider* pDP = new CustToolboxDataProvider;
            if (pDP)
            {
                pDP->AddRef();
                VSCOOKIE dwDPCookie; //UNDONE: pass NULL instead of ptr to the cookie when RegisterDataProvider allows it.
                pTB->RegisterDataProvider((IVsToolboxDataProvider*)pDP, &dwDPCookie);
                pDP->Release();
            }
            else
            {
                hr = E_OUTOFMEMORY;
            }
        }
      

Para obter uma lista padrão de Visual Studiocaixa de ferramentas formatos da área de transferência, consulte A caixa de ferramentas (Visual Studio SDK)

Consulte também

Tarefas

Desenvolvimento avançado de controle de caixa de ferramentas

Como controlar a Caixa de Ferramentas

Conceitos

Registrar os recursos de suporte da caixa de ferramentas

Gerenciando a caixa de ferramentas.

Outros recursos

A caixa de ferramentas (Visual Studio SDK)

Explicações passo a passo da caixa de ferramentas