Como: Exibir um ícone personalizado no botão suplemento
Você pode substituir o ícone padrão (um sorriso-face) que exibe próxima ao comando seu suplemento com um ícone que não seja um dos ícones padrão predefinidos conforme descrito em Como: Alterar o ícone padrão para um suplemento.
Para fazer isso:
Colocar o ícone de bitmap sistema autônomo um recurso em um arquivo DLL satélite.
configuração the MSOButton parâmetro na AddNamedCommand2 método para false (que notifica o método para procurar na DLL satélite para o ícone de bitmap).
Fazendo referência ao número de ID de recurso na parte de seu projeto suplemento barra de comandos.
O procedimento a seguir demonstra como adicionar um ícone personalizado para o botão suplemento.
Observação: |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Esses procedimentos foram desenvolvidos com o Geral Development Settings ativo.Para alterar as configurações, escolher Import and ExportSettings on the Tools menu.Para obter mais informações, consulte Configurações do Visual Studio. |
Para adicionar um bitmap personalizado sistema autônomo um add - in do ícone de botão para um adicionar - no projeto
em em aberto uma solução de suplemento existente ou criar uma nova solução de suplemento no Visual Studio.
Se você criar um novo suplemento, certifique-se de verificar a "você gostaria de criar comando BAR UI para o suplemento?" opção.
Adicione um novo arquivo de recurso para seu projeto suplemento.Para fazer isso:
clicar com o botão direito do mouse o projeto em suplementoO gerenciador de soluções.
selecionar Novo item on the Adicionar menu.
selecionar Arquivo de recursos nos modelos de lista e clicar no Adicionar botão.Deixe seu nome padrão (Resources1.resx).
This starts the Visual Studio Resource Editor.
clicar no Mostrar todos os arquivos botão na BAR de ferramentas de O gerenciador de soluções.
Nas propriedades de Resource1.resx, conjunto o Criar açãopropriedade como nenhum.
Add-ins requerem um valor inteiro sistema autônomo o argumento de bitmap.configuração Essa propriedade permite que você edite o arquivo de recurso e o nome do seu recurso de bitmap com um identificador numérico, algo que você não pode fazer quando o arquivo .resx é parte de projeto suplemento.
No Editor de recursos, clicar Adicionar recursoe, em seguida, selecionar Imagem BMP on the Nova imagem menu.Deixe seu nome padrão (Image1.bmp).
Como alternativa, você pode selecionar uma imagem de bitmap existente que tenha 16 x 16 pixels e 16 color ou True Color.Ícones personalizados para suplementos devem ser 16 x 16 pixels e 16 cores ou True Color.
Na janela Propriedades do bitmap, alterar o Altura and Largura propriedades para 16.conjunto o Corespropriedade 16 color ou True Color.
Se você tiver criado um novo bitmap, edição a imagem no recurso Editor.
clicar com o botão direito do mouse no arquivo Resource1.resx em O gerenciador de soluções e selecionar Excluir do projeto.
Isso evita erros de compilador desnecessários.O arquivo não precisa ser o projeto.Isso permite que você use o interno Editor de recursos.
Abra a classe de conectar o suplemento.No OnConnection método na AddNamedCommand2 linha, alterar o MSOButton valor do parâmetro true para falsee o Bitmap valor do parâmetro 59 para 1. Por exemplo:
command = commands.AddNamedCommand2(_addInInstance, "MyAddin1", " MyAddin1", "Executes the command for MyAddin1", False, 1, Nothing, CType(vsCommandStatus.vsCommandStatusSupported, Integer) + CType(vsCommandStatus.vsCommandStatusEnabled, Integer), vsCommandStyle.vsCommandStylePictAndText, vsCommandControlType.vsCommandControlTypeButton)
Command command = commands.AddNamedCommand2(_addInInstance, "MyAddin1", "MyAddin1", "Executes the command for MyAddin1", false, 1, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported+(int)vsCommandStatus. vsCommandStatusEnabled, (int)vsCommandStyle.vsCommandStylePictAndText, vsCommandControlType.vsCommandControlTypeButton);
Configurando o MSOButton argumento para falso força o suplemento para pesquisar em um arquivo de recurso para o bitmap de botão. O número 1, será o identificador para esse bitmap.(Ela é definida em uma etapa posterior.)
Quando você está concluído, selecionar Salvar todos on the Arquivo menu, selecionar Criar solução on the Compilação menu e, em seguida, fechar a solução.
In Windows Explorer, use Bloco de notas para edição o arquivo Resource1.resx.
Procurar por todas as ocorrências de "Image1" e alterar para "1". Quando tiver terminado, salvar o arquivo.
Na pasta \Recursos para o suplemento, altere o nome de arquivo de bitmap de Image1.bmp para 1.bmp.
Use ResGen e vinculador de assembly (AL) para criar o DLL satélite.Para fazer isso:
Sobre o Iniciar , aponte para Todos os programas, point to Microsoft Visual Studio 2005, point to O Visual Studio Toolse, em seguida, clicar O Visual Studio aviso de comando.
Isso define certas variáveis de ambiente para que você pode referenciar mais com com facilidade Visual Studio ferramentas.
No aviso de comando, vá para a pasta que contém o arquivo .resx e digite Resgen Resource1.resx.
ResGen é um utilitário que compila o arquivo .resx especificado em um arquivo .Recursos.Para obter mais informações, consulte Recurso Arquivo Generator (Resgen.exe).
Novamente, no aviso de comando, digite o seguinte: Al.exe /embed:Resource1.resources /culture:en-US /out:<Add-In Name>.resources.dll.
Substitua < Nome do Suplemento > com o nome do seu suplemento.Por exemplo, se seu projeto suplemento for MyAddin1 nomeado e, em seguida, o /out: comutador seria /out:MyAddin1.Recursos.dll.Se o /out: nome não corresponde ao nome do seu projeto, o DLL de recurso não serão encontrados.
Vinculador de assembly (Al.exe) converte o arquivo .Recursos especificado em um DLL que você pode referenciar no seu suplemento de recurso satélite.(Você pode alterar comutador /cultura para um linguagem diferente do inglês.) Para obter mais informações, consulte Vinculador do conjunto (AL.exe) .
Usando Windows Explorer, navegue até diretório de DLLs do suplemento (geralmente a pasta \bin) e criar uma pasta chamada en-US (para inglês-EUA, sistema autônomo você digitou en-US sistema autônomo o valor de cultura no AL).
Copie o arquivo de.Recursos.dll < Nome do Suplemento > para a nova pasta en-US.
In Visual Studio, em aberto novamente o projeto suplemento e executá-lo.
clicar no Ferramentas menu.
O suplemento aparece no Ferramentas menu juntamente com seu ícone personalizado.
Para adicionar um bitmap personalizado sistema autônomo um add - in do ícone de botão para um adicionar Visual C++ nativo-
Siga sistema autônomo mesmos procedimentos, conforme descrito acima, mas altere sistema autônomo seguintes itens.
Criar um novo Visual C++ Projeto Win32 DLL.
Adicione um arquivo de recurso (.rc).
Na exibição de recurso, adicione um bitmap (16 x 16) e dê a ela uma ID numérica.
O bitmap deve ser 16 x 16 pixels e 16 cores ou True Color.
Atualizar o AddNamedCommand2 método em conectar.cpp com MSOButton definido como VARIANT_FALSE, e Bitmap Defina como a ID de bitmap atribuído anteriormente.
Construa a DLL.
Crie uma subpasta "1033" (para localidade inglês) no diretório DLL nativo suplemento.
Copie o DLL satélite para o diretório "1033".
Abra AddIn.rgs e adicione dois valores de chave reg "SatelliteDllName" e "SatelliteDllPath." Por exemplo:
HKCU { NoRemove 'SOFTWARE' { NoRemove 'Microsoft' { NoRemove 'VisualStudio' { NoRemove '8.0' { NoRemove 'AddIns' { ForceRemove 'NativeAddinCustBitmap.Connect' { val LoadBehavior = d 0 val CommandLineSafe = d 0 val CommandPreload = d 1 val FriendlyName = s 'NativeAddinCustBitmap' val Description = s 'NativeAddinCustBitmap Description' val SatelliteDllName = s 'NativeAddinCustBitmapUI.dll' val SatelliteDllPath = s 'C:\Test\CustomBitmap\NativeAddinCustBitmap \NativeAddinCustBitmap\Debug' } } } } } } }
Em "SatelliteDllPath" não adicione a ID de local no caminho.Ele será acrescentado automaticamente no tempo de execução.
Reconstrua o suplemento para registrar as informações atualizadas.
Exemplo
A seguir é um exemplo completo código do suplemento para um Visual Basic/Visual C#/Visual J# suplemento que faça referência a um ícone personalizado contido em um DLL de recurso satélite.
Imports System
Imports Microsoft.VisualStudio.CommandBars
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80
Public Class Connect
Implements IDTExtensibility2
Implements IDTCommandTarget
Dim _applicationObject As DTE2
Dim _addInInstance As AddIn
Public Sub New()
End Sub
Public Sub OnConnection(ByVal application As Object, _
ByVal connectMode As ext_ConnectMode, ByVal addInInst _
As Object, ByRef custom As Array) Implements _
IDTExtensibility2.OnConnection
_applicationObject = CType(application, DTE2)
_addInInstance = CType(addInInst, AddIn)
If connectMode = ext_ConnectMode.ext_cm_UISetup Then
Dim commands As Commands2 = CType(_applicationObject. _
Commands, Commands2)
Dim toolsMenuName As String
Try
' To move the command to a different
' menu, change the word, Tools, to the English version
' of the menu. This code will take the culture, append
' the name of the menu, and then add the command to
' that menu. A list of all the top-level menus is
' in the file, CommandBar.resx.
Dim resourceManager As System.Resources. _
ResourceManager = New System.Resources. _
ResourceManager("MyAddin3.CommandBar", _
System.Reflection.Assembly.GetExecutingAssembly())
Dim cultureInfo As System.Globalization.CultureInfo _
= New System.Globalization. _
CultureInfo(_applicationObject.LocaleID)
toolsMenuName = resourceManager.GetString(String. _
Concat (cultureInfo.TwoLetterISOLanguageName, _
"Tools"))
Catch e As Exception
' We tried to find a localized version of the word,
' Tools, but one was not found. Default to the en-US
' word, which may work for the current culture.
toolsMenuName = "Tools"
End Try
' Place the command on the Tools menu.
' Find the MenuBar command bar, which is the top-level
' command bar holding all the main menu items:
Dim commandBars As CommandBars = _
CType(_applicationObject.CommandBars, _
CommandBars)
Dim menuBarCommandBar As CommandBar = _
commandBars.Item("MenuBar")
' Find the Tools command bar on the MenuBar command bar.
Dim toolsControl As CommandBarControl = _
menuBarCommandBar.Controls.Item(toolsMenuName)
Dim toolsPopup As CommandBarPopup = CType(toolsControl, _
CommandBarPopup)
Try
' Add a command to the Commands collection.
Dim command As Command = _
commands.AddNamedCommand2(_addInInstance, _
"MyAddin3", "MyAddin3", "Executes the command for _
MyAddin3", False, 1, Nothing, _
CType(vsCommandStatus.vsCommandStatusSupported, _
Integer) + CType(vsCommandStatus. _
vsCommandStatusEnabled, Integer), _
vsCommandStyle.vsCommandStylePictAndText, _
vsCommandControlType.vsCommandControlTypeButton)
' Find the appropriate command bar on the MenuBar
' command bar.
command.AddControl(toolsPopup.CommandBar, 1)
Catch argumentException As System.ArgumentException
' If we are here, then the exception is probably
' because a command with that name already exists. If
' so there is no need to recreate
' the command and we can safely ignore the exception.
End Try
End If
End Sub
Public Sub OnDisconnection(ByVal disconnectMode As _
ext_DisconnectMode, ByRef custom As Array) Implements _
IDTExtensibility2.OnDisconnection
End Sub
Public Sub OnAddInsUpdate(ByRef custom As Array) Implements _
IDTExtensibility2.OnAddInsUpdate
End Sub
Public Sub OnStartupComplete(ByRef custom As Array) Implements _
IDTExtensibility2.OnStartupComplete
End Sub
Public Sub OnBeginShutdown(ByRef custom As Array) Implements _
IDTExtensibility2.OnBeginShutdown
End Sub
Public Sub QueryStatus(ByVal commandName As String, ByVal _
neededText As vsCommandStatusTextWanted, ByRef status As _
vsCommandStatus, ByRef commandText As Object) Implements _
IDTCommandTarget.QueryStatus
If neededText = vsCommandStatusTextWanted. _
vsCommandStatusTextWantedNone Then
If commandName = "MyAddin3.Connect.MyAddin3" Then
status = CType(vsCommandStatus.vsCommandStatusEnabled _
+ vsCommandStatus.vsCommandStatusSupported, _
vsCommandStatus)
Else
status = vsCommandStatus.vsCommandStatusUnsupported
End If
End If
End Sub
Public Sub Exec(ByVal commandName As String, ByVal executeOption _
As vsCommandExecOption, ByRef varIn As Object, ByRef varOut As _
Object, ByRef handled As Boolean) Implements _
IDTCommandTarget.Exec
handled = False
If executeOption = vsCommandExecOption. _
vsCommandExecOptionDoDefault Then
If commandName = "MyAddin3.Connect.MyAddin3" Then
handled = True
MsgBox("Add-in is running.")
Exit Sub
End If
End If
End Sub
End Class
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using Microsoft.VisualStudio.CommandBars;
using System.Resources;
using System.Reflection;
using System.Globalization;
namespace MyAddin1
{
public class Connect : Object, IDTExtensibility2, IDTCommandTarget
{
public Connect()
{
}
public void OnConnection(object application, ext_ConnectMode
connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
if(connectMode == ext_ConnectMode.ext_cm_UISetup)
{
object []contextGUIDS = new object[] { };
Commands2 commands =
(Commands2)_applicationObject.Commands;
string toolsMenuName;
try
{
ResourceManager resourceManager = new
ResourceManager("MyAddin1.CommandBar",
Assembly.GetExecutingAssembly());
CultureInfo cultureInfo = new
System.Globalization.CultureInfo
(_applicationObject.LocaleID);
string resourceName = String.Concat(cultureInfo.
TwoLetterISOLanguageName, "Tools");
toolsMenuName =
resourceManager.GetString(resourceName);
}
catch
{
toolsMenuName = "Tools";
}
CommandBar menuBarCommandBar =
((CommandBars)_applicationObject.CommandBars)["MenuBar"];
CommandBarControl toolsControl =
menuBarCommandBar.Controls[toolsMenuName];
CommandBarPopup toolsPopup = (CommandBarPopup)toolsControl;
try
{
Command command =
commands.AddNamedCommand2(_addInInstance, "MyAddin1",
"MyAddin1", "Executes the command for MyAddin1",
false, 1, ref contextGUIDS,
(int)vsCommandStatus.vsCommandStatusSupported+(int)
vsCommandStatus.vsCommandStatusEnabled,
(int)vsCommandStyle.vsCommandStylePictAndText,
vsCommandControlType.vsCommandControlTypeButton);
if((command != null) && (toolsPopup != null))
{
command.AddControl(toolsPopup.CommandBar, 1);
}
}
catch
{
}
}
}
public void OnDisconnection(ext_DisconnectMode disconnectMode, ref
Array custom)
{
}
public void OnAddInsUpdate(ref Array custom)
{
}
public void OnStartupComplete(ref Array custom)
{
}
public void OnBeginShutdown(ref Array custom)
{
}
public void QueryStatus(string commandName,
vsCommandStatusTextWanted neededText, ref vsCommandStatus status,
ref object commandText)
{
if(neededText ==
vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
{
if(commandName == "MyAddin1.Connect.MyAddin1")
{
status =
(vsCommandStatus)vsCommandStatus.
vsCommandStatusSupported|vsCommandStatus.
vsCommandStatusEnabled;
return;
}
}
}
public void Exec(string commandName, vsCommandExecOption
executeOption, ref object varIn, ref object varOut, ref bool
handled)
{
handled = false;
if(executeOption ==
vsCommandExecOption.vsCommandExecOptionDoDefault)
{
if(commandName == "MyAddin1.Connect.MyAddin1")
{
handled = true;
System.Windows.Forms.MessageBox.Show("Add-in ran.");
return;
}
}
}
private DTE2 _applicationObject;
private AddIn _addInInstance;
}
}
Consulte também
Tarefas
Como: Alterar o ícone padrão para um suplemento
Como: Expor um suplemento sistema autônomo um botão na barra de ferramentas