Visual Studio 的颜色和样式

适用范围:yesVisual Studio noVisual Studio for Mac noVisual Studio Code

在 Visual Studio 中使用颜色

在 Visual Studio 中,颜色主要用于通信工具,而不仅仅是装饰。 尽可能少地使用颜色,并保留该颜色用于需要以下情况:

  • 传达含义或隶属关系 (,例如平台或语言修饰符)

  • 例如, (吸引注意力,指示状态更改)

  • 提高可读性并提供用于导航 UI 的地标

  • 提高可取性

在 Visual Studio 中,有多个选项可用于为 UI 元素分配颜色。 有时可能很难确定应使用哪个选项,或如何正确使用它。 本主题将帮助你:

  • 了解用于在 Visual Studio 中定义颜色的不同服务和系统。

  • 为给定元素选择正确的选项。

  • 正确使用所选选项。

注意

切勿将十六进制、RGB 或系统颜色硬编码为 UI 元素。 使用服务可以灵活地调整色调。 此外,如果没有该服务,你将无法利用 VSColor 服务的主题切换功能。

用于将颜色分配给 Visual Studio 接口元素的方法

选择最适合 UI 元素的方法。

你的 UI 方法 分别是哪两个参数?
你已嵌入或独立对话框。 系统颜色 允许操作系统定义 UI 元素的颜色和外观(如常见对话控件)的系统名称。
你拥有希望与整个 VS 环境保持一致的自定义 UI,并且具有与共享令牌的类别和语义含义匹配的 UI 元素。 常见共享颜色 特定 UI 元素的现有预定义颜色标记名称
你有一个单独的功能或一组功能,并且没有共享颜色的类似元素。 自定义颜色 特定于区域且不打算与其他 UI 共享的颜色令牌名称
你希望允许最终用户自定义 UI 或内容 (例如,对于文本编辑器或专用设计器窗口) 。 最终用户自定义

“ (工具 > 选项”对话框)
在“ 工具 > 选项 ”对话框的“字体和颜色”页中定义的设置,或特定于一个 UI 功能的专用页面。

Visual Studio 主题

Visual Studio 具有三种不同的颜色主题:浅色、深色和蓝色。 它还检测高对比度模式,这是专为辅助功能而设计的系统范围颜色主题。

系统会提示用户在首次使用 Visual Studio 期间选择主题,以后可以通过转到 “工具 > 选项 > 环境 > 常规 ”并从“颜色主题”下拉菜单中选择新主题来切换主题。

用户还可以使用控制面板将其整个系统切换到多个高对比度主题之一。 如果用户选择高对比度主题,则 Visual Studio 颜色主题选择器不再影响 Visual Studio 中的颜色,尽管当用户退出高对比度模式时,将保存任何主题更改。 有关高对比度模式的详细信息,请参阅 选择高对比度颜色

VSColor 服务

Visual Studio 提供环境颜色服务(称为 VSColor 服务),可用于将 UI 元素的颜色值绑定到包含每个 Visual Studio 主题颜色值的命名条目。 这可确保颜色会自动更改,以反映当前用户选择的主题或系统高对比度模式。 使用服务意味着所有与主题相关的颜色更改的实现都在一个位置进行处理,如果使用服务中的常见共享颜色,UI 将自动在 Visual Studio 的未来版本中反映新主题。

实现

Visual Studio 源代码包括多个包定义文件,这些文件包含标记名称和每个主题的相应颜色值的列表。 颜色服务读取这些包定义文件中定义的 VSColors。 这些颜色在 XAML 标记或代码中引用,然后通过 IVsUIShell5.GetThemedColor 方法或 DynamicResource 映射加载。

系统颜色

默认情况下,通用控件引用系统颜色。 如果希望 UI 使用系统颜色(例如创建嵌入或独立对话时),则无需执行任何操作。

VSColor 服务中的常见共享颜色

接口元素应反映整个 Visual Studio 环境。 通过重用适用于所设计的 UI 组件的常见共享颜色,可确保界面与其他 Visual Studio 界面一致,并且颜色会在添加或更新主题时自动更新。

在使用常见共享颜色之前,请确保了解如何正确使用它们。 错误使用常见共享颜色可能会导致用户体验不一致、令人沮丧或令人困惑。

用户可自定义的颜色

请参阅: 为最终用户公开颜色

有时,需要允许最终用户自定义 UI,例如创建代码编辑器或设计图面时。 可在“工具>选项”对话框的“字体和颜色”部分找到可自定义的 UI 组件,用户可以在其中选择更改前景色和/或背景色。

工具 > “选项”对话框
“工具 > 选项”对话框

VSColor 服务

Visual Studio 提供环境颜色服务,也称为 VSColor 服务或 shell 颜色服务。 此服务允许将 UI 元素的颜色值绑定到包含每个主题颜色的名称-值颜色集。 VSColor 服务必须用于所有 UI 元素,以便颜色自动更改以反映当前用户选择的主题,以便绑定到环境颜色服务的 UI 将与 Visual Studio 的未来版本中的新主题集成。

服务的工作原理

环境颜色服务读取在 UI 组件的 .pkgdef 中定义的 VSColors。 然后,这些 VSColor 在 XAML 标记或代码中引用,并通过 IVsUIShell5.GetThemedColorDynamicResource 映射加载。

环境颜色服务体系结构
环境颜色服务体系结构

访问服务

可通过多种不同的方式访问 VSColor 服务,具体取决于你使用的颜色令牌类型以及你拥有的代码类型。

预定义的环境颜色

从本机代码

shell 提供了一项服务,用于访问 COLORREF 颜色的 。 服务/接口为:

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

在 VSShell80.idl 文件中,枚举 __VSSYSCOLOREX 具有 shell 颜色常量。 若要使用它,请将 作为索引值传入,可以是 MSDN 中记录的值 enum __VSSYSCOLOREX 之一, GetSysColor也可以是 Windows 系统 API 接受的常规索引号。 执行此操作会取回应在第二个参数中使用的颜色的 RGB 值。

如果使用新颜色存储笔或画笔,则必须 AdviseBroadcastMessages (Visual Studio shell) 并侦 WM_SYSCOLORCHANGE 听 和 WM_THEMECHANGED 消息。

若要在本机代码中访问颜色服务,需要进行类似于以下内容的调用:

pUIShell2->GetVSSysColorEx(VSCOLOR_COLOR_NAME, &rgbLOCAL_COLOR);

注意

COLORREF返回GetVSSysColorEx()的值仅包含主题颜色的 R、G、B 分量。 如果主题条目使用透明度,则返回前将放弃 alpha 通道值。 因此,如果需要在透明度通道很重要的位置使用感兴趣的环境颜色,则应使用 IVsUIShell5.GetThemedColor 而不是 IVsUIShell2::GetVSSysColorEx,如本主题后面部分所述。

从托管代码

通过本机代码访问 VSColor 服务非常简单。 但是,如果你正在处理托管代码,则确定如何使用该服务可能比较棘手。 考虑到这一点,下面是演示此过程的 C# 代码片段:

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);
    }
}

如果在 Visual Basic 中工作,请使用:

Dim myColor As Color = ColorTranslator.FromWin32((Integer)win32Color)
从 WPF UI

可以通过导出到应用程序的 ResourceDictionary中的值绑定到 Visual Studio 颜色。 下面是使用颜色表中的资源以及在 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>

托管代码的帮助程序类和方法

对于托管代码,shell 的托管包框架库 (Microsoft.VisualStudio.Shell.12.0.dll) 包含几个帮助程序类,便于使用主题颜色。

MPF 中的 Microsoft.VisualStudio.Shell.VsColors 类中的帮助程序方法包括 GetThemedGDIColor()GetThemedWPFColor()。 这些帮助程序方法以 或 System.Windows.Media.Color的形式System.Drawing.Color返回主题项的颜色值,将在 WinForms 或 WPF UI 中使用。

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]);
}

类还可用于获取给定 WPF 颜色资源键的 VSCOLOR 标识符,反之亦然。

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

类的方法 VsColors 查询 VSColor 服务,以便在每次调用它们时返回颜色值。 若要获取颜色值作为 System.Drawing.Color,性能更好的替代方法是改用 类的方法 Microsoft.VisualStudio.PlatformUI.VSColorTheme ,该类将缓存从 VSColor 服务获取的颜色值。 类在内部订阅 shell 广播消息事件,并在发生主题更改事件时放弃缓存的值。 此外, 类提供 。用于订阅主题更改的 NET 友好事件。 ThemeChanged使用 事件添加新处理程序,并使用 GetThemedColor() 方法获取感兴趣的 的颜色值ThemeResourceKeys。 示例代码可能如下所示:

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);}
}

选择高对比度颜色

概述

Windows 使用多个高对比度的系统级主题,这些主题可提高文本、背景和图像的颜色对比度,使元素在屏幕上更加明显。 出于辅助功能原因,当用户切换到高对比度主题时,Visual Studio 界面元素必须正确响应。

只有少数系统颜色可用于高对比度主题。 选择系统颜色名称时,请记住以下提示:

  • 选择与着色元素具有相同语义含义的系统颜色 。 例如,如果要为窗口中的文本选择高对比度颜色,请使用 WindowText 而不是 ControlText。

  • 一起选择前景/背景对 ,否则你将无法确信你的颜色选择适用于所有高对比度主题。

  • 确定 UI 的哪些部分最为重要,并确保内容区域脱颖而出。 由于不同内容区域没有颜色变体,因此使用强边框颜色很常见以定义内容区域,因此会丢失大量细节,因为颜色差异通常不一样。

系统颜色集

WPF 团队博客:SystemColors 参考中的表指示了完整的系统颜色名称集,以及每个主题中显示的相应色调。

将这组有限的颜色应用于 UI 时, 预期会丢失“正常”主题中存在的细微细节。 下面是一个 UI 示例,该 UI 具有微妙的灰色,用于区分工具窗口中的区域。 与在高对比度模式下显示的同一窗口配对时,可以看到所有背景都是相同的色调,并且这些区域的边框单独由边框指示:

030303-a_PropertiesWindow高对比度
高对比度中如何丢失微妙细节的示例

在编辑器中选择文本颜色

在编辑器或设计图面上使用彩色文本来指示含义,例如,可以轻松识别相似项的组。 但是,在高对比度主题中,你无法区分三种以上的文本颜色。 WindowText、GrayText 和 HotTrackText 是 WindowBackground 图面上唯一可用的颜色。 由于不能使用三种以上的颜色,因此请仔细选择要在高对比度模式下显示的最重要差异。

编辑器图面上允许的每个标记名称的色调,因为它们显示在每个高对比度主题中:

高对比度编辑器比较
高对比度编辑器比较

蓝色主题中的编辑器图面示例:

蓝色主题编辑器
蓝色主题中的编辑器

编辑器高对比度 #1 主题
高对比度 #1 主题的编辑器

使用模式

许多常见的 UI 元素已经定义了高对比度颜色。 在选择自己的系统颜色名称时,可以引用这些使用模式,以便 UI 元素与类似的组件保持一致。

系统颜色 使用情况
ActiveCaption - 悬停和按下时的活动 IDE 和漂流窗口按钮字形
- IDE 和漂流窗口的标题栏背景
- 默认状态栏背景
ActiveCaptionText - 标题栏前台的活动 IDE 和漂流窗口 (文本和字形)
- 悬停和按下活动窗口按钮的背景和边框
控制 - 组合框、下拉列表和搜索控件默认和禁用的背景,包括下拉按钮
- 停靠目标按钮背景
- 命令栏背景
- 工具窗口背景
ControlDark - IDE 背景
- 菜单和命令栏分隔符
- 命令栏边框
- 菜单阴影
- 工具窗口选项卡默认和悬停边框和分隔符
- 文档井溢出按钮背景
- 停靠目标字形边框
ControlDarkDark - 未聚焦的选定文档选项卡窗口
ControlLight - 自动隐藏选项卡边框
- 组合框和下拉列表边框
- 停靠目标背景和边框
ControlLightLight - 选定、聚焦的临时边框
ControlText - 组合框和下拉列表字形
- 工具窗口未选择选项卡文本
GrayText - 组合框和下拉列表禁用的边框、下拉字形、文本和菜单项文本
- 禁用的菜单文本
- 搜索控件“搜索选项”标题文本
- 搜索控件节分隔符
突出显示 - 所有悬停和按下的背景和边框,组合框下拉按钮背景和文档井溢出按钮边框除外
- 所选项目背景
HighlightText - 所有悬停和按下的前景 (文本和字形)
- 重点工具窗口和文档选项卡窗口控件前景
- 重点工具窗口标题栏边框
- 已聚焦,选定的临时选项卡前景
- 悬停并按文档井溢出按钮边框
- 所选图标边框
HotTrack - 按滚动条拇指背景和边框
- 按滚动条箭头字形
InactiveCaption - 悬停时非活动 IDE 和漂流窗口按钮字形
- IDE 和漂流窗口的标题栏背景
- 禁用搜索控件背景
InactiveCaptionText - 非活动 IDE 和漂流的窗口标题栏前台 (文本和字形)
- 非活动窗口按钮背景和悬停边框
- 未聚焦的工具窗口按钮背景和边框
- 已禁用搜索控件前台
菜单 - 下拉菜单背景
- 选中并禁用检查标记背景
MenuText - 下拉菜单边框
- 复选标记
- 菜单字形
- 下拉菜单文本
- 所选图标边框
Scrollbar - 滚动条和滚动条箭头背景,所有状态
窗口 - 自动隐藏选项卡背景
- 菜单栏和命令架背景
- 未聚焦或未选择的文档窗口选项卡背景和文档边框,适用于打开选项卡和临时选项卡
- 未聚焦的工具窗口标题栏背景
- 工具窗口选项卡背景,已选择和未选中
WindowFrame - IDE 边框
WindowText - 自动隐藏选项卡前景
- 所选工具窗口选项卡前景
- 未聚焦的文档窗口选项卡和未聚焦或未选择的临时选项卡前景
- 树视图默认前景,并将鼠标悬停在未选择的字形上
- 工具窗口选定的选项卡边框
- 滚动条拇指背景、边框和字形

为最终用户公开颜色

概述

有时需要允许最终用户自定义 UI,例如创建代码编辑器或设计图面时。 执行此操作的最常见方法是使用 “工具 > 选项 ”对话框。 除非具有需要特殊控件的高度专用化 UI,否则呈现自定义项的最简单方法是通过对话框的“环境”部分中的“字体和颜色”页。 对于为自定义公开的每个元素,用户可以选择更改前景色和/或背景色。

为可自定义颜色生成 VSPackage

VSPackage 可以通过自定义类别控制字体和颜色,并在“字体和颜色”属性页上显示项。 使用此机制时,VSPackages 必须实现 IVsFontAndColorDefaultsProvider 接口及其关联的接口。

原则上,此机制可用于修改所有现有显示项以及包含它们的类别。 但是,它不应用于修改文本编辑器类别或其显示项。 有关“文本编辑器”类别的详细信息,请参阅 字体和颜色概述

若要实现自定义类别或显示项,VSPackage 必须:

  • 在注册表中创建或标识类别。 IDE 实现的 Fonts and Colors 属性页使用此信息来正确查询支持给定类别的服务。

  • 在注册表中创建或标识组 (可选) 。 定义表示两个或多个类别的联合的组可能很有用。 如果定义了组,IDE 会自动合并子类别并在组中分发显示项。

  • 实现 IDE 支持。

  • 处理字体和颜色更改。

创建或标识类别

构造一个特殊类型的类别注册表项,其中 [HKLM\SOFTWARE\Microsoft \Visual Studio\\<Visual Studio version\>\FontAndColors\\<Category\>]<Category> 是类别的非本地化名称。

使用两个值填充注册表:

名称 类型 数据 说明
类别 REG_SZ GUID 为标识类别而创建的 GUID
REG_SZ GUID 支持类别的 VSPackage 服务的 GUID

注册表中指定的服务必须为相应类别提供 IVsFontAndColorDefaults 的实现。

创建或标识组

构造特殊类型的类别注册表项,其中 [HKLM\SOFTWARE\Microsoft \Visual Studio\\<Visual Studio version\>\FontAndColors\\<group\>]<group> 是组的非本地化名称。

使用两个值填充注册表:

名称 类型 数据 说明
类别 REG_SZ GUID 为标识类别而创建的 GUID
REG_SZ GUID 支持类别的 VSPackage 服务的 GUID

注册表中指定的服务必须为相应的组提供 的 IVsFontAndColorGroup 实现。

IVsFontAndColorGroup 的实现
IVsFontAndColorGroup 的实现

实现 IDE 支持

实现 GetObject,它为提供的每个类别或组 GUID 返回 IVsFontAndColorDefaults 接口或 IVsFontAndColorGroup IDE 接口。

对于它支持的每个类别,VSPackage 实现 IVsFontAndColorDefaults 接口的单独实例。

通过 IVsFontAndColorDefaults 实现的方法必须为 IDE 提供:

  • 类别中的显示项列表

  • 显示项的可本地化名称

  • 显示类别的每个成员的信息

注意

每个类别必须至少包含一个显示项。

IDE 使用 IVsFontAndColorGroup 接口定义多个类别的联合。

其实现为 IDE 提供:

  • 构成给定组的类别列表

  • 访问支持组内每个类别的 IVsFontAndColorDefaults 实例

  • 可本地化的组名称

更新 IDE

IDE 缓存有关字体和颜色设置的信息。 因此,在对 IDE 字体和颜色配置进行任何修改后,最佳做法是确保缓存是最新的。

更新缓存是通过 IvsFontAndColorCacheManager 接口完成的,可以全局执行,也可以仅对所选项执行。

处理字体和颜色更改

若要正确支持 VSPackage 显示的文本着色,支持 VSPackage 的着色服务必须响应用户通过“字体和颜色”属性页发起的更改。

为此,VSPackage 必须:

  • 通过实现 IVsFontAndColorEvents 接口来处理 IDE 生成的事件。 IDE 在用户修改“字体和颜色”页后调用相应的方法。 例如,如果选择了新字体,它将调用 OnFontChanged 方法。

    OR

  • 在 IDE 中轮询更改。 这可以通过系统实现的 IVsFontAndColorStorage 接口来完成。 尽管 GetItem 方法主要用于支持持久性,但可以获取显示项的字体和颜色信息。 有关字体和颜色设置的详细信息,请参阅 MSDN 文章 访问存储的字体和颜色设置

注意

若要确保轮询结果正确,请在调用 IVsFontAndColorStorage 接口的检索方法之前,使用 IVsFontAndColorCacheManager 接口确定是否需要缓存刷新和更新。

在不实现接口的情况下注册自定义字体和颜色类别

下面的代码示例演示如何在不实现接口的情况下注册自定义字体和颜色类别:

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

对于此代码示例:

  • "NameID" = 包中本地化类别名称的资源 ID
  • "ToolWindowPackage" = 包 GUID
  • "Category"="{9FF46859-A47E-47bf-8AC5-EC3DBE69D1FE}" 只是一个示例,实际值可以是实现者提供的新 GUID。

设置“字体和颜色”属性类别 GUID

下面的代码示例演示如何设置类别 GUID。

// 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);
}
}