Compartilhar via


Cores e estilo para Visual Studio

Usar cores no Visual Studio

No Visual Studio, a cor é usada principalmente como uma ferramenta de comunicação, não apenas como decoração. Use a cor minimamente e reserve-a para situações em que você deseja:

  • Comunicar significado ou afiliação (por exemplo, modificadores de plataforma ou idioma)

  • Atrair atenção (por exemplo, indicando uma mudança de status)

  • Melhorar a legibilidade e fornecer pontos de referência para navegar na interface do usuário

  • Aumentar a desejabilidade

Existem várias opções para atribuir cores a elementos da interface do usuário no Visual Studio. Às vezes, pode ser difícil descobrir qual opção você deve usar ou como usá-la corretamente. Este tópico irá ajudá-lo a:

  • Compreenda os diferentes serviços e sistemas usados para definir cores no Visual Studio.

  • Selecione a opção correta para um determinado elemento.

  • Use corretamente a opção escolhida.

Observação

Nunca codifique hex, RGB ou cores do sistema para seus elementos da interface do usuário. O uso dos serviços permite flexibilidade no ajuste de tonalidade. Além disso, sem o serviço, você não poderá aproveitar os recursos de troca de tema do serviço VSColor.

Métodos para atribuir cor a elementos de interface do Visual Studio

Escolha o método mais adequado aos elementos da interface do usuário.

Sua interface do usuário Método Quais são eles?
Você tem caixas de diálogo incorporadas ou autônomas. Cores do Sistema Nomes de sistema que permitem que o sistema operacional defina a cor e a aparência dos elementos da interface do usuário, como controles de caixa de diálogo comuns.
Você tem uma interface do usuário personalizada que deseja ser consistente com o ambiente VS geral e tem elementos de interface do usuário que correspondem à categoria e ao significado semântico dos tokens compartilhados. Cores comuns compartilhadas Nomes de token de cores predefinidos existentes para elementos específicos da interface do usuário
Você tem um recurso individual ou um grupo de recursos e não há cor compartilhada para elementos semelhantes. Cores personalizadas Nomes de token de cor que são específicos de uma área e não devem ser compartilhados com outra interface do usuário
Você deseja permitir que o usuário final personalize a interface do usuário ou o conteúdo (por exemplo, para editores de texto ou janelas de designer especializadas). Personalização do usuário final

(Ferramentas > Caixa de diálogo Opções)
Configurações definidas na página "Fontes e cores" da caixa de diálogo Opções de ferramentas > ou em uma página especializada específica para um recurso de interface do usuário.

Temas do Visual Studio

O Visual Studio apresenta três temas de cores diferentes: claro, escuro e azul. Ele também detecta o modo de alto contraste, que é um tema de cores de todo o sistema projetado para acessibilidade.

Os usuários são solicitados a selecionar um tema durante seu primeiro uso do Visual Studio e podem alternar temas mais tarde, indo para Ferramentas > Opções > Ambiente > Geral e escolhendo um novo tema no menu suspenso "tema de cores".

Os usuários também podem usar o Painel de Controle para alternar seus sistemas inteiros em um dos vários temas de Alto Contraste. Se um usuário selecionar um tema de Alto Contraste, o seletor de tema de cores do Visual Studio não afetará mais as cores no Visual Studio, embora quaisquer alterações de tema sejam salvas para quando o usuário sair do modo de Alto Contraste. Para obter mais informações sobre o modo de Alto Contraste, consulte Escolhendo cores de Alto Contraste.

O serviço VSColor

O Visual Studio fornece um serviço de cores de ambiente, conhecido como serviço VSColor, que permite vincular os valores de cor dos elementos da interface do usuário a uma entrada nomeada que contém valores de cor para cada tema do Visual Studio. Isso garante que suas cores serão alteradas automaticamente para refletir o tema atual selecionado pelo usuário ou o modo de Alto Contraste do sistema. O uso do serviço significa que a implementação de todas as alterações de cores relacionadas ao tema é tratada em um só lugar e, se você estiver usando cores compartilhadas comuns do serviço, sua interface do usuário refletirá automaticamente novos temas em versões futuras do Visual Studio.

Implementação

O código-fonte do Visual Studio inclui vários arquivos de definição de pacote que contêm listas de nomes de token e os respectivos valores de cor para cada tema. O serviço de cores lê os VSColors definidos nesses arquivos de definição de pacote. Essas cores são referenciadas na marcação XAML ou no código e, em seguida, carregadas por meio do método ou de IVsUIShell5.GetThemedColor um mapeamento DynamicResource.

Cores do Sistema

Os controles comuns fazem referência às cores do sistema por padrão. Se você quiser que sua interface do usuário use cores do sistema, como quando estiver criando uma caixa de diálogo incorporada ou autônoma, não precisará fazer nada.

Cores compartilhadas comuns no serviço VSColor

Seus elementos de interface devem refletir o ambiente geral do Visual Studio. Ao reutilizar as cores compartilhadas comuns que são apropriadas para o componente de interface do usuário que você está criando, você garante que sua interface seja consistente com outras interfaces do Visual Studio e que suas cores serão atualizadas automaticamente quando os temas forem adicionados ou atualizados.

Antes de usar cores compartilhadas comuns, certifique-se de entender como usá-las corretamente. O uso incorreto de cores compartilhadas comuns pode resultar em uma experiência inconsistente, frustrante ou confusa para seus usuários.

Cores personalizáveis pelo usuário

Consulte: Expondo cores para usuários finais

Às vezes, você desejará permitir que o usuário final personalize sua interface do usuário, como quando você estiver criando um editor de código ou superfície de design. Os componentes personalizáveis da interface do usuário são encontrados na seção Fontes e Cores da caixa de diálogo Opções de Ferramentas>, onde os usuários podem optar por alterar a cor do primeiro plano, a cor do plano de fundo ou ambas.

Tools > Options dialog
Caixa de diálogo Opções de Ferramentas >

O serviço VSColor

O Visual Studio fornece um serviço de cores de ambiente, também chamado de serviço VSColor ou serviço de cores do shell. Esse serviço permite vincular os valores de cor dos elementos da interface do usuário a um conjunto de cores de nome-valor contendo cores para cada tema. O serviço VSColor deve ser usado para todos os elementos da interface do usuário, para que as cores sejam alteradas automaticamente para refletir o tema atual selecionado pelo usuário e para que a interface do usuário vinculada ao serviço de cores do ambiente se integre a novos temas em versões futuras do Visual Studio.

Como funciona o serviço

O serviço de cores do ambiente lê VSColors definidos no .pkgdef para o componente da interface do usuário. Esses VSColors são referenciados em marcação ou código XAML e são carregados por meio de IVsUIShell5.GetThemedColor um DynamicResource mapeamento.

Environment color service architecture
Arquitetura do serviço de cores do ambiente

Acessando o serviço

Há várias maneiras diferentes de acessar o serviço VSColor, dependendo do tipo de tokens de cor que você está usando e do tipo de código que você tem.

Cores de ambiente predefinidas

Do código nativo

O shell fornece um serviço que dá acesso ao COLORREF das cores. O serviço/interface é:

IVsUIShell2::GetVSSysColorEx(VSSYSCOLOR dwSysColIndex, DWORD *pdwRGBval)

No arquivo VSShell80.idl, a enumeração tem constantes de __VSSYSCOLOREX cor do shell. Para usá-lo, passe como o valor de índice um dos valores do documentado no MSDN ou um número de índice regular que a API do enum __VSSYSCOLOREX sistema Windows, , GetSysColoraceita. Fazendo isso, obtém de volta o valor RGB da cor que deve ser usada no segundo parâmetro.

Se estiver armazenando uma caneta ou pincel com uma nova cor, você deve AdviseBroadcastMessages (fora do shell do Visual Studio) e ouvir WM_SYSCOLORCHANGE e WM_THEMECHANGED mensagens.

Para acessar o serviço de cores em código nativo, você fará uma chamada semelhante a esta:

pUIShell2->GetVSSysColorEx(VSCOLOR_COLOR_NAME, &rgbLOCAL_COLOR);

Observação

Os COLORREF valores retornados por GetVSSysColorEx() contêm apenas componentes R,G,B de uma cor de tema. Se uma entrada de tema usar transparência, o valor do canal alfa será descartado antes de retornar. Portanto, se a cor do ambiente de interesse precisar ser usada em um local onde o canal de transparência é importante, você deve usar IVsUIShell5.GetThemedColor em vez de IVsUIShell2::GetVSSysColorEx, como descrito posteriormente neste tópico.

Do código gerenciado

Acessar o serviço VSColor por meio de código nativo é bastante simples. No entanto, se você estiver trabalhando com código gerenciado, determinar como usar o serviço pode ser complicado. Com isso em mente, aqui está um trecho de código C# demonstrando esse processo:

private void VSColorPaint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    //getIVSUIShell2
    IVsUIShell2 uiShell2 = Package.GetService(typeof(SVsUIShell)) as IVsUIShell2;
    Debug.Assert (uiShell2 != null, "failed to get IVsUIShell2");

    if (uiShell2 != null)
    {
        //get the COLORREF structure
        uint win32Color;
        uiShell2.GetVSSysColorEx((int)__VSSYSCOLOREX.VSCOLOR_SMARTTAG_HOVER_FILL, out win32Color);

        //translate it to a managed Color structure
        Color myColor = ColorTranslator.FromWin32((int)win32Color);
        //use it
        e.Graphics.FillRectangle(new SolidBrush(myColor), 0, 0, 100, 100);
    }
}

Se você estiver trabalhando no Visual Basic, use:

Dim myColor As Color = ColorTranslator.FromWin32((Integer)win32Color)
Da interface do usuário do WPF

Você pode vincular a cores do Visual Studio por meio de ResourceDictionaryvalores exportados para o . Veja abaixo um exemplo de uso de recursos da tabela de cores, bem como vinculação aos dados de fonte do ambiente em XAML.

<Style TargetType="{x:Type Button}">
    <Setter Property="TextBlock.FontFamily"
            Value="{DynamicResource VsFont.EnvironmentFontFamily}" />
    <Setter Property="TextBlock.FontSize"
            Value="{DynamicResource VsFont.EnvironmentFontSize}" />
    <Setter Property="Background"
            Value="{DynamicResource VsBrush.EnvironmentBackgroundGradient}" />
</Style>

Classes e métodos auxiliares para código gerenciado

Para código gerenciado, a biblioteca Managed Package Framework (Microsoft.VisualStudio.Shell.12.0.dll) do shell contém algumas classes auxiliares que facilitam o uso de cores temáticas.

Os métodos auxiliares na Microsoft.VisualStudio.Shell.VsColors classe no MPF incluem GetThemedGDIColor() e GetThemedWPFColor(). Esses métodos auxiliares retornam o valor de cor de uma entrada de tema como System.Drawing.Color ou , a ser usado no WinForms ou System.Windows.Media.Colorna interface do usuário do WPF.

IVsUIShell5 shell5;
Button button = new Button();
button.BackColor = GetThemedGDIColor(shell5, SolutionExplorerColors.SelectedItemBrushKey);
button.ForeColor = GetThemedGDIColor(shell5, SolutionExplorerColors.SelectedItemTextBrushKey);

/// <summary>
/// Gets a System.Drawing.Color value from the current theme for the given color key.
/// </summary>
/// <param name="vsUIShell">The IVsUIShell5 service, used to get the color's value.</param>
/// <param name="themeResourceKey">The key to find the color for.</param>
/// <returns>The current theme's value of the named color.</returns>
public static System.Drawing.Color GetThemedGDIColor(this IVsUIShell5 vsUIShell, ThemeResourceKey themeResourceKey)
{
   Validate.IsNotNull(vsUIShell, "vsUIShell");
   Validate.IsNotNull(themeResourceKey, "themeResourceKey");

   byte[] colorComponents = GetThemedColorRgba(vsUIShell, themeResourceKey);

   // Note: The Win32 color we get back from IVsUIShell5.GetThemedColor is ABGR
   return System.Drawing.Color.FromArgb(colorComponents[3], colorComponents[0], colorComponents[1], colorComponents[2]);
}

private static byte[] GetThemedColorRgba(IVsUIShell5 vsUIShell, ThemeResourceKey themeResourceKey)
{
   Guid category = themeResourceKey.Category;
   __THEMEDCOLORTYPE colorType = __THEMEDCOLORTYPE.TCT_Foreground
   if (themeResourceKey.KeyType == ThemeResourceKeyType.BackgroundColor || themeResourceKey.KeyType == ThemeResourceKeyType.BackgroundBrush)
   {
      colorType = __THEMEDCOLORTYPE.TCT_Background;
   }

   // This call will throw an exception if the color is not found
   uint rgbaColor = vsUIShell.GetThemedColor(ref category, themeResourceKey.Name, (uint)colorType);
   return BitConverter.GetBytes(rgbaColor);
}
public static System.Windows.Media.Color GetThemedWPFColor(this IVsUIShell5 vsUIShell, ThemeResourceKey themeResourceKey)
{
   Validate.IsNotNull(vsUIShell, "vsUIShell");
   Validate.IsNotNull(themeResourceKey, "themeResourceKey");

   byte[] colorComponents = GetThemedColorComponents(vsUIShell, themeResourceKey);

    return System.Windows.Media.Color.FromArgb(colorComponents[3], colorComponents[0], colorComponents[1], colorComponents[2]);
}

A classe também pode ser usada para obter identificadores VSCOLOR para uma determinada chave de recurso de cor WPF, ou vice-versa.

public static string GetColorBaseKey(int vsSysColor);
public static bool TryGetColorIDFromBaseKey(string baseKey, out int vsSysColor);

Os métodos de classe consultam o serviço VSColor para retornar o valor de VsColors cor cada vez que são chamados. Para obter um valor de cor como System.Drawing.Color, uma alternativa com melhor desempenho é usar os Microsoft.VisualStudio.PlatformUI.VSColorTheme métodos da classe, que armazena em cache os valores de cor obtidos do serviço VSColor. A classe assina internamente eventos de mensagens de difusão do shell e descarta o valor armazenado em cache quando ocorre um evento de alteração de tema. Além disso, a classe fornece um arquivo . NET-friendly evento para se inscrever para alterações de tema. Use o evento para adicionar um novo manipulador e use o método para obter valores de cor para o ThemeChanged GetThemedColor() ThemeResourceKeys de interesse. Um código de exemplo pode ter esta aparência:

public MyWindowPanel()
{
    InitializeComponent();

    // Subscribe to theme changes events so we can refresh the colors
    VSColorTheme.ThemeChanged += VSColorTheme_ThemeChanged;

    RefreshColors();
}

private void VSColorTheme_ThemeChanged(ThemeChangedEventArgs e)
{
    RefreshColors();

    // Also post a message to all the children so they can apply the current theme appropriately
    foreach (System.Windows.Forms.Control child in this.Controls)
    {
        NativeMethods.SendMessage(child.Handle, e.Message, IntPtr.Zero, IntPtr.Zero);
    }
}

private void RefreshColors()
{
    this.BackColor = VSColorTheme.GetThemedColor(EnvironmentColors.ToolWindowBackgroundColorKey);
    this.ForeColor = VSColorTheme.GetThemedColor(EnvironmentColors.ToolWindowTextColorKey);
}

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        VSColorTheme.ThemeChanged -= this.VSColorTheme_ThemeChanged;
        base.Dispose(disposing);}
}

Escolhendo cores de alto contraste

O Windows usa vários temas de alto contraste no nível do sistema que aumentam o contraste de cores de texto, planos de fundo e imagens, fazendo com que os elementos pareçam mais distintos na tela. Por motivos de acessibilidade, é importante que os elementos de interface do Visual Studio respondam corretamente quando os usuários alternam para um tema de Alto Contraste.

Apenas um punhado de cores do sistema pode ser usado para temas de alto contraste. Ao escolher os nomes de cores do sistema, lembre-se das seguintes dicas:

  • Escolha cores do sistema que tenham o mesmo significado semântico que o elemento que você está colorindo. Por exemplo, se você estiver escolhendo uma cor de alto contraste para texto dentro de uma janela, use WindowText e não ControlText.

  • Escolha pares de primeiro plano/plano de fundo juntos ou você não terá certeza de que sua escolha de cor funcionará em todos os temas de Alto Contraste.

  • Determine quais partes da interface do usuário são as mais importantes e garanta que as áreas de conteúdo se destaquem. Você perderá muitos detalhes que diferenças sutis na tonalidade de cor normalmente distinguiriam, então o uso de cores de borda fortes é comum para definir áreas de conteúdo, porque não há variantes de cores para diferentes áreas de conteúdo.

Conjunto de cores do sistema

A tabela no WPF Team Blog: SystemColors Reference indica o conjunto completo de nomes de cores do sistema e os matizes correspondentes exibidos em cada tema.

Ao aplicar esse conjunto limitado de cores à sua interface do usuário, espera-se que você perca detalhes sutis que estavam presentes nos temas "normais". Aqui está um exemplo de interface do usuário com cores cinza sutis que são usadas para distinguir áreas dentro de uma janela de ferramenta. Quando emparelhado com a mesma janela exibida no modo de Alto Contraste, você pode ver que todos os planos de fundo são da mesma tonalidade e as bordas dessas áreas são indicadas apenas pela borda:

Example of how subtle details are lost in High Contrast
Exemplo de como detalhes sutis são perdidos em Alto Contraste

Escolhendo cores de texto em um editor

O texto colorido é usado em um editor ou em uma superfície de design para indicar significado, como permitir a fácil identificação de grupos de itens semelhantes. Em um tema de alto contraste, no entanto, você não tem a capacidade de diferenciar entre mais de três cores de texto. WindowText, GrayText e HotTrackText são as únicas cores disponíveis em superfícies WindowBackground. Como você não pode usar mais de três cores, escolha cuidadosamente as diferenças mais importantes que deseja exibir quando estiver no modo de Alto Contraste.

Matizes para cada um dos nomes de token permitidos em uma superfície de editor, conforme aparecem em cada tema de Alto Contraste:

High Contrast editor comparison
Comparação do editor de alto contraste

Exemplos da superfície do editor no tema Azul:

Editor in Blue theme
Editor no tema azul

Editor in High Contrast #1 theme
Editor no tema Alto Contraste #1

Padrões de uso

Muitos elementos comuns da interface do usuário já têm cores de alto contraste definidas. Você pode fazer referência a esses padrões de uso ao escolher seus próprios nomes de cores do sistema, para que os elementos da interface do usuário sejam consistentes com componentes semelhantes.

Cor do sistema Uso
ActiveCaption - IDE ativo e glifos de botão de janela rafted ao passar o mouse e pressionar
- Fundo da barra de título para IDE e janelas rafted
- Fundo da barra de status padrão
ActiveCaptionText - IDE ativo e janelas rafted para primeiro plano da barra de título (texto e glifos)
- Fundo e borda dos botões de janela ativa ao passar o mouse e pressionar
Control - Caixa de combinação, lista suspensa e controle de pesquisa padrão e plano de fundo desativado, incluindo botão suspenso
- Fundo do botão de destino do dock
- Fundo da barra de comandos
- Fundo da janela de ferramentas
ControlDark - Fundo do IDE
- Separadores de menu e barra de comandos
- Borda da barra de comandos
- Sombras do menu
- Janela de ferramentas guia padrão e borda de foco e separador
- Fundo do botão de estouro do documento
- Borda do glifo do alvo da doca
ControlDarkDark - Janela de guia de documento selecionada sem foco
ControlLight - Ocultar automaticamente a borda da guia
- Caixa de combinação e borda da lista suspensa
- Fundo e borda do alvo do dock
ControlLightLight - Borda provisória selecionada e focalizada
ControlText - Caixa de combinação e glifo da lista suspensa
- Texto da guia não selecionada da janela de ferramenta
Texto em cinza - Caixa de combinação e lista suspensa borda desativada, glifo suspenso, texto e texto do item de menu
- Texto do menu desativado
- Controle de pesquisa 'opções de pesquisa' texto do cabeçalho
- Separador de seção de controle de pesquisa
Destaque - Todos os fundos e bordas focalizados e pressionados, exceto fundo do botão suspenso da caixa de combinação e borda do botão de estouro do documento
- Planos de fundo de itens selecionados
DestaqueTexto - Todos os primeiros planos focalizados e pressionados (texto e glifos)
- Janela de ferramenta focada e janela de guia de documento de controle de primeiro plano
- Borda da barra de título da janela de ferramentas focada
- Primeiro plano da guia provisória focalizada e selecionada
- Documente a borda do botão de estouro do poço ao passar o mouse e pressione
- Borda do ícone selecionado
HotTrack - Barra de rolagem, fundo do polegar e borda na imprensa
- Glifo de seta da barra de rolagem na imprensa
InactiveCaption - IDE inativo e glifos de botão de janela rafted ao passar o mouse
- Fundo da barra de título para IDE e janelas rafted
- Fundo de controle de pesquisa desativado
InactiveCaptionText - IDE inativo e janelas de rafted em primeiro plano da barra de título (texto e glifos)
- Botões de janela inativos fundo e borda ao passar o mouse
- Fundo e borda do botão da janela de ferramentas desfocados
- Controle de pesquisa desativado em primeiro plano
Menu - Fundo do menu suspenso
- Verificado e desativado fundo de marca de verificação
MenuText - Borda do menu suspenso
- Marcas de verificação
- Glifos do menu
- Texto do menu suspenso
- Borda do ícone selecionado
Barra de rolagem - Barra de rolagem e fundo de seta da barra de rolagem, todos os estados
Janela - Ocultar automaticamente o fundo da guia
- Barra de menus e fundo de prateleira de comandos
- Fundo da guia da janela do documento sem foco ou não selecionado e borda do documento, para guias abertas e provisórias
- Fundo da barra de título da janela de ferramentas desfocada
- Fundo da guia da janela de ferramentas, selecionado e não selecionado
WindowFrame - Borda IDE
WindowText - Auto-ocultar primeiro plano da guia
- Janela de ferramentas selecionada em primeiro plano
- Guia da janela do documento sem foco e primeiro plano da guia provisória não focada ou não selecionada
- Visualização em árvore em primeiro plano padrão e passe o mouse sobre o glifo não selecionado
- Janela de ferramenta selecionada borda da guia
- Fundo do polegar da barra de rolagem, borda e glifo

Expondo cores para usuários finais

Às vezes, você vai querer permitir que o usuário final personalize sua interface do usuário, como quando você está criando um editor de código ou superfície de design. A maneira mais comum de fazer isso é usando a caixa de diálogo Opções de ferramentas>. A menos que você tenha uma interface do usuário altamente especializada que exija controles especiais, a maneira mais fácil de apresentar a personalização é por meio da página Fontes e Cores na seção Ambiente da caixa de diálogo. Para cada elemento exposto para personalização, o usuário pode optar por alterar a cor de primeiro plano, a cor do plano de fundo ou ambas.

Criando um VSPackage para suas cores personalizáveis

Um VSPackage pode controlar as fontes e cores por meio de categorias personalizadas e exibir itens na página de propriedades Fontes e Cores. Ao usar esse mecanismo, VSPackages deve implementar a interface IVsFontAndColorDefaultsProvider e suas interfaces associadas.

Em princípio, esse mecanismo pode ser usado para modificar todos os itens de exibição existentes e as categorias que os contêm. No entanto, ele não deve ser usado para modificar a categoria Editor de texto ou seus itens de exibição. Para obter mais informações sobre a categoria Editor de texto, consulte Visão geral sobre fonte e cor.

Para implementar categorias personalizadas ou exibir Itens, um VSPackage deve:

  • Criar ou identificar categorias no Registro. A implementação do IDE da página de propriedades Fontes e Cores usa essas informações para consultar corretamente o serviço que oferece suporte a uma determinada categoria.

  • Criar ou identificar grupos no Registro (opcional). Pode ser útil definir um grupo, que representa a união de duas ou mais categorias. Se um grupo for definido, o IDE mesclará automaticamente subcategorias e distribuirá itens de exibição dentro do grupo.

  • Implemente o suporte ao IDE.

  • Lidar com alterações de fonte e cor.

Para criar ou identificar categorias

Construa um tipo especial de entrada de registro de categoria em [HKLM\SOFTWARE\Microsoft \Visual Studio\\<Visual Studio version\>\FontAndColors\\<Category\>] que <Category> é o nome não localizado da categoria.

Preencha o registro com dois valores:

Nome Tipo Dados Descrição
Categoria REG_SZ GUID Um GUID criado para identificar a categoria
Pacote REG_SZ GUID O GUID do serviço VSPackage que oferece suporte à categoria

O serviço especificado no registro deve fornecer uma implementação de IVsFontAndColorDefaults para a categoria correspondente.

Para criar ou identificar grupos

Construa um tipo especial de entrada de registro de categoria em [HKLM\SOFTWARE\Microsoft \Visual Studio\\<Visual Studio version\>\FontAndColors\\<group\>] que <group> é o nome não localizado do grupo.

Preencha o registro com dois valores:

Nome Tipo Dados Descrição
Categoria REG_SZ GUID Um GUID criado para identificar a categoria
Pacote REG_SZ GUID O GUID do serviço VSPackage que oferece suporte à categoria

O serviço especificado no registro deve fornecer uma implementação de IVsFontAndColorGroup para o grupo correspondente.

Implementation of IVsFontAndColorGroup
Implementação de IVsFontAndColorGroup

Para implementar o suporte ao IDE

Implemente GetObject, que retorna uma interface IVsFontAndColorDefaults ou uma IVsFontAndColorGroup interface para o IDE para cada GUID de categoria ou grupo fornecido.

Para cada categoria suportada, um VSPackage implementa uma instância separada da interface IVsFontAndColorDefaults .

Os métodos implementados por meio de IVsFontAndColorDefaults devem fornecer ao IDE:

  • Listas de itens de exibição na categoria

  • Nomes localizáveis para itens de exibição

  • Exibir informações para cada membro da categoria

Observação

Cada categoria deve conter pelo menos um item de exibição.

O IDE usa a IVsFontAndColorGroup interface para definir uma união de várias categorias.

Sua implementação fornece ao IDE:

  • Uma lista das categorias que compõem um determinado grupo

  • Acesso a instâncias de IVsFontAndColorDefaults com suporte a cada Categoria dentro do grupo

  • Nomes de grupos localizáveis

Atualizando o IDE

O IDE armazena em cache informações sobre as configurações de Fonte e Cor. Portanto, após qualquer modificação da configuração de fonte e cor do IDE, garantir que o cache esteja atualizado é uma prática recomendada.

A atualização do cache é feita através da interface IvsFontAndColorCacheManager e pode ser realizada globalmente ou apenas em itens selecionados.

Manipulando alterações de fonte e cor

Para oferecer suporte adequado à colorização de texto que um VSPackage exibe, o serviço de colorização que oferece suporte ao VSPackage deve responder às alterações iniciadas pelo usuário feitas por meio da página de propriedades Fontes e Cores.

Para fazer isso, um VSPackage deve:

  • manipular eventos gerados pelo IDE implementando a interface IVsFontAndColorEvents . O IDE chama o método apropriado após modificações do usuário na página Fontes e cores. Por exemplo, ele chama o método OnFontChanged se uma nova fonte for selecionada.

    OR

  • sondar o IDE para obter alterações. Isso pode ser feito através da interface IVsFontAndColorStorage implementada pelo sistema. Embora principalmente para suporte de persistência, o GetItem método pode obter informações de fonte e cor para Exibir itens. Para obter mais informações sobre configurações de fonte e cor, consulte o artigo do MSDN Acessando configurações de fonte e cor armazenadas.

Observação

Para garantir que os resultados da sondagem estejam corretos, use a interface IVsFontAndColorCacheManager para determinar se uma liberação e atualização de cache são necessárias antes de chamar os métodos de recuperação da interface IVsFontAndColorStorage .

Registrando fonte personalizada e categoria de cor sem implementar interfaces

O exemplo de código a seguir demonstra como registrar a fonte personalizada e cor Category sem implementar interfaces:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\FontAndColors\CSharp Tool Window]
"Package"="{F5E7E71D-1401-11D1-883B-0000F87579D2}"
"Category"="{9FF46859-A47E-47bf-8AC5-EC3DBE69D1FE}"
"ToolWindowPackage"="{7259e420-6241-4e0d-b535-5b820671d183}"

    "NameID"=dword:00000064

Para este exemplo de código:

  • "NameID" = o ID do recurso do nome da categoria localizada no pacote
  • "ToolWindowPackage" = GUID do pacote
  • "Category"="{9FF46859-A47E-47bf-8AC5-EC3DBE69D1FE}" é apenas um exemplo e o valor real pode ser um novo GUID fornecido pelo implementador.

Definir o GUID da categoria de propriedade Fonte e Cor

O exemplo de código abaixo demonstra a configuração de GUIDs de categoria.

// m_pView is your IVsTextView
IVsTextEditorPropertyCategoryContainer spPropCatContainer =
(IVsTextEditorPropertyCategoryContainer)m_pView;
if (spPropCatContainer != null)
{
IVsTextEditorPropertyContainer spPropContainer;
Guid GUID_EditPropCategory_View_MasterSettings =
new Guid("{D1756E7C-B7FD-49a8-B48E-87B14A55655A}");
hr = spPropCatContainer.GetPropertyCategory(
ref GUID_EditPropCategory_View_MasterSettings,
out spPropContainer);
if(hr == 0)
{
hr =
spPropContainer.SetProperty(
VSEDITPROPID.VSEDITPROPID_ViewGeneral_FontCategory,
catGUID);
hr =
spPropContainer.SetProperty(
VSEDITPROPID.VSEDITPROPID_ViewGeneral_ColorCategory,
catGUID);
}
}