次の方法で共有


イメージ サービスとイメージ カタログ

このクックブックでは、Visual Studio 2015 で導入された Visual Studio イメージ サービスとイメージ カタログを採用する際のガイダンスとベスト プラクティスについて説明します。

Visual Studio 2015 で導入されたイメージ サービスを使用すると、開発者はデバイスに最適な画像とユーザーが選択したテーマを取得して、表示されるコンテキストに合った正しいテーマなどの画像を表示することができます。 イメージ サービスを採用すると、アセットのメンテナンス、HDPI スケール、テーマ設定に関連する主要な問題点を解消することができます。

現在の問題 ソリューション
背景色のブレンド 組み込みのアルファ ブレンド
(何かの) テーマ設定画像 テーマのメタデータ
ハイ コントラスト モード 代替ハイ コントラスト リソース
さまざまな DPI モードのために複数のリソースが必要 ベクターベースのフォールバックを含む選択可能なリソース
重複する画像 画像の概念ごとに 1 つの識別子

イメージ サービスを採用する理由

  • Visual Studio から常に最新の "最適なピクセルの" 画像が取得されます

  • 独自の画像を送信して使用することができます

  • 新しい DPI スケールが Windows に追加されても、画像をテストする必要はありません

  • 実装に含まれる古いアーキテクチャの課題に対処できます

    イメージ サービスを使用する前と後の Visual Studio シェルのツール バー:

    イメージ サービス の前と後

しくみ

イメージ サービスを使用すると、サポートされている UI フレームワークに適したビットマップ画像を提供できます。

  • WPF: BitmapSource

  • WinForms: System.Drawing.Bitmap

  • Win32: HBITMAP

    イメージ サービスのフロー ダイアグラム

    イメージ サービスのフロー ダイアグラム

    イメージ モニカー

    イメージ モニカー (または略してモニカー) は、画像ライブラリ内の画像アセットまたは画像リスト アセットを一意に識別する GUID と ID のペアです。

    既知のモニカー

    Visual Studio イメージ カタログに含まれ、Visual Studio のコンポーネントまたは拡張機能から一般に使用できる一連のイメージ モニカー。

    イメージ マニフェスト ファイル

    イメージ マニフェスト (.imagemanifest) ファイルは、一連の画像アセット、それらのアセットを表すモニカー、各アセットを表す実際の 1 つ以上の画像を定義する XML ファイルです。 イメージ マニフェストでは、従来の UI をサポートするために、スタンドアロン イメージまたはイメージ リストを定義できます。 また、アセットまたは各アセットの背後にある個々の画像に対して設定できる属性があり、これらのアセットが表示されるタイミングと方法を変更できます。

    イメージ マニフェストのスキーマ

    イメージ マニフェスト全体は次のようになります。

<ImageManifest>
      <!-- zero or one Symbols elements -->
      <Symbols>
        <!-- zero or more Import, Guid, ID, or String elements -->
      </Symbols>
      <!-- zero or one Images elements -->
      <Images>
        <!-- zero or more Image elements -->
      </Images>
      <!-- zero or one ImageLists elements -->
      <ImageLists>
        <!-- zero or more ImageList elements -->
      </ImageLists>
</ImageManifest>

記号

読みやすく、メンテナンスを容易にするために、イメージ マニフェストには属性値として記号を使用できます。 記号は次のように定義されます。

<Symbols>
      <Import Manifest="manifest" />
      <Guid Name="ShellCommandGuid" Value="8ee4f65d-bab4-4cde-b8e7-ac412abbda8a" />
      <ID Name="cmdidSaveAll" Value="1000" />
      <String Name="AssemblyName" Value="Microsoft.VisualStudio.Shell.UI.Internal" />
      <!-- If your assembly is strongly named, you'll need the version and public key token as well -->
      <!-- <String Name="AssemblyName" Value="Microsoft.VisualStudio.Shell.UI.Internal;v17.0.0.0;b03f5f7f11d50a3a" /> -->
</Symbols>
サブ要素 定義
インポート 現在のマニフェストで使用するために、指定したマニフェスト ファイルの記号をインポートします
GUID 記号は GUID を表し、GUID の書式設定と一致する必要があります
ID 記号は ID を表し、負でない整数である必要があります
String 記号は任意の文字列値を表します

記号は大文字と小文字が区別され、$(記号名) の構文を使用して参照されます。

<Image Guid="$(ShellCommandGuid)" ID="$(cmdidSaveAll)" >
      <Source Uri="/$(AssemblyName);Component/Resources/image.xaml" />
</Image>

一部の記号は、すべてのマニフェストに対して事前に定義されています。 これらは、ローカル コンピューター上のパスを参照するために、<Source> または <Import> 要素の Uri 属性で使用できます。

記号 説明
CommonProgramFiles %CommonProgramFiles% 環境変数の値
LocalAppData %LocalAppData% 環境変数の値
ManifestFolder マニフェスト ファイルが含まれるフォルダー
MyDocuments 現在のユーザーのマイ ドキュメント フォルダーの完全なパス
ProgramFiles %ProgramFiles% 環境変数の値
System Windows\System32 フォルダー
WinDir %WinDir% 環境変数の値

イメージ

<Image> 要素には、モニカーから参照できる画像を定義します。 GUID と ID を組み合わせてイメージ モニカーが形成されます。 イメージ モニカーは、画像ライブラリ全体で一意である必要があります。 特定のモニカーが複数の画像に含まれている場合は、ライブラリのビルド中に最初に検出されたものが保持されます。

ソースは少なくとも 1 つ含まれている必要があります。 サイズに依存しないソースであれば、幅広いサイズで最適な結果を得られますが、必須ではありません。 <Image> 要素に定義されていないサイズの画像がサービスに要求され、サイズに依存しないソースが存在しない場合、サービスによって、最適なサイズ固有のソースが選択され、要求されたサイズに合わせて拡大縮小されます。

<Image Guid="guid" ID="int" AllowColorInversion="true/false">
      <Source ... />
      <!-- optional additional Source elements -->
</Image>
属性 定義
GUID [必須] イメージ モニカーの GUID 部分
ID [必須] イメージ モニカーの ID 部分
AllowColorInversion [省略可能、既定値は true] 画像を暗い背景で使用するときに、色をプログラムによって反転するかどうかを示します。

ソース

<Source> 要素には、単一の画像ソース アセット (XAML と PNG) を定義します。

<Source Uri="uri" Background="background">
      <!-- optional NativeResource element -->
 </Source>
属性 定義
Uri [必須] 画像の読み込み元となる場所を定義する URI。 次のいずれかを指定できます。

- application:/// オーソリティを使用するパック URI
- コンポーネントの絶対リソース参照
- ネイティブ リソースを含むファイルのパス
背景 [省略可能] ソースの使用を想定している背景の種類を示します。

次のいずれかを指定できます。

Light: ソースは明るい背景で使用できます。

Dark: ソースは暗い背景で使用できます。

HighContrast: ソースは、ハイ コントラスト モードの任意の背景で使用できます。

HighContrastLight: ソースは、ハイ コントラスト モードの明るい背景で使用できます。

HighContrastDark: ソースは、ハイ コントラスト モードの暗い背景で使用できます。

Background 属性が省略されている場合は、任意の背景でソースを使用できます。

Background が LightDarkHighContrastLight、または HighContrastDark の場合、ソースの色は反転されません。 Background が省略されているか HighContrast に設定されている場合、ソースの色の反転は、画像の AllowColorInversion 属性によって制御されます。

<Source> 要素には、次のオプションのサブ要素のうち 1 つのみを含めることができます。

Element 属性 (すべて必須) 定義
<[サイズ]> Value ソースは、指定されたサイズ (デバイス単位) の画像に使用されます。 画像は正方形になります。
<SizeRange> MinSize、MaxSize ソースは、MinSize から MaxSize (デバイス単位) までの画像に使用されます。 画像は正方形になります。
<Dimensions> Width、Height ソースは、指定された幅と高さ (デバイス単位) の画像に使用されます。
<DimensionRange> MinWidth、MinHeight、

MaxWidth、MaxHeight
ソースは、幅と高さの最小値から幅と高さの最大値まで (デバイス単位) の画像に使用されます。

<Source> 要素には、省略可能な <NativeResource> サブ要素を含めることもできます。これを使用して、マネージド アセンブリではなくネイティブ アセンブリから読み込まれる <Source> を定義できます。

<NativeResource Type="type" ID="int" />
属性 定義
Type [必須] ネイティブ リソースの種類 (XAML または PNG)
ID [必須] ネイティブ リソースの整数 ID 部分

ImageList

<ImageList> 要素には、1 つのストリップで返すことができる画像のコレクションを定義します。 ストリップは必要に応じて要求時に構築されます。

<ImageList>
      <ContainedImage Guid="guid" ID="int" External="true/false" />
      <!-- optional additional ContainedImage elements -->
 </ImageList>
属性 定義
GUID [必須] イメージ モニカーの GUID 部分
ID [必須] イメージ モニカーの ID 部分
外部 [省略可能、既定値は false] イメージ モニカーから、現在のマニフェスト内の画像が参照されているかどうかを示します。

含まれている画像のモニカーから、現在のマニフェストに定義されている画像を参照する必要はありません。 含まれている画像が画像ライブラリに見つからない場合は、空白のプレースホルダー画像が代わりに使用されます。

イメージ サービスの使用

最初の手順 (マネージド)

イメージ サービスを使用するには、次のアセンブリの一部またはすべてへの参照をプロジェクトに追加する必要があります。

  • Microsoft.VisualStudio.ImageCatalog.dll

    • 組み込みのイメージ カタログ KnownMonikers を使用する場合に必要です。
  • Microsoft.VisualStudio.Imaging.dll

    • WPF UI で CrispImage および ImageThemingUtilities を使用する場合に必要です。
  • Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll

    • ImageMoniker および ImageAttributes 型を使用する場合に必要です。

    • EmbedInteropTypes を true に設定する必要があります。

  • Microsoft.VisualStudio.Shell.Interop.14.0.DesignTime

    • IVsImageService2 型を使用する場合に必要です。

    • EmbedInteropTypes を true に設定する必要があります。

  • Microsoft.VisualStudio.Utilities.dll

    • WPF UI で ImageThemingUtilities.ImageBackgroundColorBrushToColorConverter を使用する場合に必要です。
  • Microsoft.VisualStudio.Shell.<VSVersion>.0

    • IVsUIObject 型を使用する場合に必要です。
  • Microsoft.VisualStudio.Shell.Interop.10.0.dll

    • WinForms 関連の UI ヘルパーを使用する場合に必要です。

    • EmbedInteropTypes を true に設定する必要があります

最初の手順 (ネイティブ)

イメージ サービスを使用するには、プロジェクトに次のヘッダーの一部またはすべてを含める必要があります。

  • KnownImageIds.h

    • 組み込みのイメージ カタログ KnownMonikers を使用していても、ImageMoniker 型を使用できない場合に必要です。たとえば、IVsHierarchy GetGuidPropertyGetProperty の呼び出しから値を返すときなどです。
  • KnownMonikers.h

    • 組み込みのイメージ カタログ KnownMonikers を使用する場合に必要です。
  • ImageParameters140.h

    • ImageMoniker および ImageAttributes 型を使用する場合に必要です。
  • VSShell140.h

    • IVsImageService2 型を使用する場合に必要です。
  • ImageThemingUtilities.h

    • イメージ サービスにテーマ設定を任せることができない場合に必要です。

    • イメージ サービスでテーマ設定を処理できる場合は、このヘッダーを使用しないでください。

  • VsDpiAwareness.h

    • DPI 認識ヘルパーを使用して現在の DPI を取得する場合に必要です。

新しい WPF UI を作成する方法

  1. まず、前述の「最初の手順」セクションで必要なアセンブリ参照をプロジェクトに追加します。 すべてを追加する必要はないので、必要な参照のみを追加してください (注: Brushes ではなく Colors を使用しているか、アクセスできる場合、コンバーターは不要なので、Utilities への参照をスキップできます)。

  2. 目的の画像を選択し、そのモニカーを取得します。 KnownMoniker を使用するか、独自のカスタム画像とモニカーがある場合は独自のものを使用します。

  3. XAML に CrispImages を追加します (下の例を参照してください)。

  4. UI 階層に ImageThemingUtilities.ImageBackgroundColor プロパティを設定します (これは、背景色がわかる場所に設定する必要があり、CrispImage に必須なものではありません) (次の例を参照してください)。

<Window
  x:Class="WpfApplication.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:imaging="clr-namespace:Microsoft.VisualStudio.Imaging;assembly=Microsoft.VisualStudio.Imaging"
  xmlns:theming="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Imaging"
  xmlns:utilities="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Utilities"
  xmlns:catalog="clr-namespace:Microsoft.VisualStudio.Imaging;assembly=Microsoft.VisualStudio.ImageCatalog"
  Title="MainWindow" Height="350" Width="525" UseLayoutRounding="True">
  <Window.Resources>
    <utilities:BrushToColorConverter x:Key="BrushToColorConverter"/>
  </Window.Resources>
  <StackPanel Background="White" VerticalAlignment="Center"
    theming:ImageThemingUtilities.ImageBackgroundColor="{Binding Background, RelativeSource={RelativeSource Self}, Converter={StaticResource BrushToColorConverter}}">
    <imaging:CrispImage Width="16" Height="16" Moniker="{x:Static catalog:KnownMonikers.MoveUp}" />
  </StackPanel>
</Window>

既存の WPF UI を更新する方法

既存の WPF UI の更新は比較的簡単であり、次の 3 つの基本的な手順で構成されます。

  1. UI のすべての <Image> 要素を <CrispImage> 要素に置き換えます。

  2. すべてのソース属性を Moniker 属性に変更します。

    • 画像が変更されず、KnownMonikers を使用している場合は、そのプロパティを KnownMoniker に静的にバインドします (上の例を参照してください)。

    • 画像が変更されず、独自のカスタム画像を使用している場合は、独自のモニカーに静的にバインドします。

    • 画像が変更される可能性がある場合は、プロパティの変更時に通知するコード プロパティに Moniker 属性をバインドします。

  3. UI 階層内のどこかに ImageThemingUtilities.ImageBackgroundColor を設定し、色の反転が正しく機能することを確認します。

    • これには、BrushToColorConverter クラスの使用が必要になる場合があります (上の例を参照してください)。

Win32 UI を更新する方法

必要に応じて以下をコードに追加し、画像の生の読み込みを置き換えます。 必要に応じて HBITMAP、HICON、または HIMAGELIST を返すように値を切り替えます。

イメージ サービスを取得する

CComPtr<IVsImageService2> spImgSvc;
CGlobalServiceProvider::HrQueryService(SID_SVsImageService, &spImgSvc);

画像の要求

UINT dpiX, dpiY;
HWND hwnd = // get the HWND where the image will be displayed
VsUI::CDpiAwareness::GetDpiForWindow(hwnd, &dpiX, &dpiY);

ImageAttributes attr = { 0 };
attr.StructSize      = sizeof(attributes);
attr.Format          = DF_Win32;
// IT_Bitmap for HBITMAP, IT_Icon for HICON, IT_ImageList for HIMAGELIST
attr.ImageType       = IT_Bitmap;
attr.LogicalWidth    = 16;
attr.LogicalHeight   = 16;
attr.Dpi             = dpiX;
// Desired RGBA color, if you don't use this, don't set IAF_Background below
attr.Background      = 0xFFFFFFFF;
attr.Flags           = IAF_RequiredFlags | IAF_Background;

CComPtr<IVsUIObject> spImg;
// Replace this KnownMoniker with your desired ImageMoniker
spImgSvc->GetImage(KnownMonikers::Blank, attributes, &spImg);

WinForms UI を更新する方法

必要に応じて以下をコードに追加し、画像の生の読み込みを置き換えます。 必要に応じて Bitmap または Icon を返すように値を切り替えます。

役に立つ using ステートメント

using GelUtilities = Microsoft.Internal.VisualStudio.PlatformUI.Utilities;

イメージ サービスを取得する

// This or your preferred way of querying for Visual Studio services
IVsImageService2 imageService = (IVsImageService2)Package.GetGlobalService(typeof(SVsImageService));

画像を要求する

Control control = // get the control where the image will be displayed

ImageAttributes attributes = new ImageAttributes
{
    StructSize    = Marshal.SizeOf(typeof(ImageAttributes)),
    // IT_Bitmap for Bitmap, IT_Icon for Icon, IT_ImageList for ImageList
    ImageType     = (uint)_UIImageType.IT_Bitmap,
    Format        = (uint)_UIDataFormat.DF_WinForms,
    LogicalWidth  = 16,
    LogicalHeight = 16,
    Dpi           = (int)DpiAwareness.GetWindowDpi(control.Handle);
    // Desired RGBA color, if you don't use this, don't set IAF_Background below
    Background    = 0xFFFFFFFF,
    Flags         = unchecked((uint)_ImageAttributesFlags.IAF_RequiredFlags | _ImageAttributesFlags.IAF_Background),
};

// Replace this KnownMoniker with your desired ImageMoniker
IVsUIObject uIObj = imageService.GetImage(KnownMonikers.Blank, attributes);

Bitmap bitmap = (Bitmap)GelUtilities.GetObjectData(uiObj); // Use this if you need a bitmap
// Icon icon = (Icon)GelUtilities.GetObjectData(uiObj);    // Use this if you need an icon

新しいツール ウィンドウでイメージ モニカーを使用する方法

VSIX パッケージ プロジェクト テンプレートは、Visual Studio 2015 用に更新されました。 新しいツール ウィンドウを作成するには、VSIX プロジェクトを右クリックし、[追加]>[新しい項目] (Ctrl+Shift+A キー) を選択します。 プロジェクト言語の [機能拡張] ノードで、[カスタム ツール ウィンドウ] を選択し、ツール ウィンドウに名前を付けて、[追加] ボタンを押します。

これらは、ツール ウィンドウでモニカーを使用する主な場所です。 それぞれの手順に従ってください。

  1. タブが十分に小さくなったときのツール ウィンドウ タブ (Ctrl+Tab ウィンドウ スイッチャーでも使用されます)。

    ToolWindowPane 型から派生するクラスのコンストラクターに次の行を追加します。

    // Replace this KnownMoniker with your desired ImageMoniker
    this.BitmapImageMoniker = KnownMonikers.Blank;
    
  2. ツール ウィンドウを開くコマンド。

    パッケージの .vsct ファイルで、ツール ウィンドウのコマンド ボタンを編集します。

    <Button guid="guidPackageCmdSet" id="CommandId" priority="0x0100" type="Button">
      <Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1"/>
      <!-- Replace this KnownMoniker with your desired ImageMoniker -->
      <Icon guid="ImageCatalogGuid" id="Blank" />
      <!-- Add this -->
      <CommandFlag>IconIsMoniker</CommandFlag>
      <Strings>
        <ButtonText>MyToolWindow</ButtonText>
      </Strings>
    </Button>
    

    <Extern> 要素の後に、ファイルの先頭にも次のものが存在することを確認します。

    <Include href="KnownImageIds.vsct"/>
    

既存のツール ウィンドウでイメージ モニカーを使用する方法

イメージ モニカーを使用するように既存のツール ウィンドウを更新するには、新しいツール ウィンドウを作成する場合と同様の手順で行います。

これらは、ツール ウィンドウでモニカーを使用する主な場所です。 それぞれの手順に従ってください。

  1. タブが十分に小さくなったときのツール ウィンドウ タブ (Ctrl+Tab ウィンドウ スイッチャーでも使用されます)。

    1. ToolWindowPane 型から派生したクラスのコンストラクター内にあるこれらの行 (存在する場合) を削除します。

      this.BitmapResourceID = <Value>;
      this.BitmapIndex = <Value>;
      
    2. 上記の「新しいツール ウィンドウでイメージ モニカーを使用する方法」セクションの手順 1 を参照してください。

  2. ツール ウィンドウを開くコマンド。

    • 上記の「新しいツール ウィンドウでイメージ モニカーを使用する方法」セクションの手順 2 を参照してください。

.vsct ファイルでイメージ モニカーを使用する方法

次のコメント行に示されているように、.vsct ファイルを更新します。

<?xml version="1.0" encoding="utf-8"?>
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <!--  Include the definitions for images included in the VS image catalog -->
  <Include href="KnownImageIds.vsct"/>
  <Commands package="guidMyPackage">
    <Buttons>
      <Button guid="guidMyCommandSet" id="cmdidMyCommand" priority="0x0000" type="Button">
        <!-- Add an Icon element, changing the attributes to match the image moniker you want to use.
             In this case, we're using the Guid for the VS image catalog.
             Change the id attribute to be the ID of the desired image moniker. -->
        <Icon guid="ImageCatalogGuid" id="OpenFolder" />
        <CommandFlag>DynamicVisibility</CommandFlag>
        <CommandFlag>DefaultInvisible</CommandFlag>
        <CommandFlag>DefaultDisabled</CommandFlag>
        <CommandFlag>CommandWellOnly</CommandFlag>
        <CommandFlag>IconAndText</CommandFlag>
        <!-- Add the IconIsMoniker CommandFlag -->
        <CommandFlag>IconIsMoniker</CommandFlag>
        <Strings>
          <ButtonText>Quick Fixes...</ButtonText>
          <CommandName>Show Quick Fixes</CommandName>
          <CanonicalName>ShowQuickFixes</CanonicalName>
          <LocCanonicalName>ShowQuickFixes</LocCanonicalName>
        </Strings>
      </Button>
    </Buttons>
  </Commands>
  <!-- It is recommended that you remove <Bitmap> elements that are no longer used in the vsct file -->
  <Symbols>
    <GuidSymbol name="guidMyPackage"    value="{1491e936-6ffe-474e-8371-30e5920d8fdd}" />
    <GuidSymbol name="guidMyCommandSet" value="{10347de4-69a9-47f4-a950-d3301f6d2bc7}">
      <IDSymbol name="cmdidMyCommand" value="0x9437" />
    </GuidSymbol>
  </Symbols>
</CommandTable>

以前のバージョンの Visual Studio でも .vsct ファイルを読み取る必要がある場合

以前のバージョンの Visual Studio では、IconIsMoniker コマンド フラグが認識されません。 イメージ サービスの画像は、それをサポートするバージョンの Visual Studio 上では使用できますが、以前のバージョンの Visual Studio 上では引き続き古いスタイルの画像を使用できます。 これを行うには、.vsct ファイルを変更せずに (そのため、以前のバージョンの Visual Studio との互換性が保たれます)、.vsct ファイルの <Bitmaps> 要素に定義されている GUID と ID のペアから、イメージ モニカーの GUID と ID のペアにマップする CSV (コンマ区切りの値) ファイルを作成します。

マッピング CSV ファイルの形式は次のとおりです。

Icon guid, Icon id, Moniker guid, Moniker id
b714fcf7-855e-4e4c-802a-1fd87144ccad,1,fda30684-682d-421c-8be4-650a2967058e,100
b714fcf7-855e-4e4c-802a-1fd87144ccad,2,fda30684-682d-421c-8be4-650a2967058e,200

CSV ファイルはパッケージと共に配置され、その場所は ProvideMenuResource パッケージ属性の IconMappingFilename プロパティで指定されます。

[ProvideMenuResource("MyPackage.ctmenu", 1, IconMappingFilename="IconMappings.csv")]

IconMappingFilename は、(上の例のように)暗黙的に $PackageFolder$ をルートとする相対パスか、@"%UserProfile%\dir1\dir2\MyMappingFile.csv" のように環境変数に定義されたディレクトリをルートとする明示的な絶対パスのいずれかです。

プロジェクト システムをポートする方法

プロジェクトに ImageMoniker を提供する方法

  1. プロジェクトの IVsHierarchyVSHPROPID_SupportsIconMonikers を実装し、true を返します。

  2. VSHPROPID_IconMonikerImageList (元のプロジェクトに VSHPROPID_IconImgList が使用されている場合)、または VSHPROPID_IconMonikerGuidVSHPROPID_IconMonikerIdVSHPROPID_OpenFolderIconMonikerGuidVSHPROPID_OpenFolderIconMonikerId (元のプロジェクトに VSHPROPID_IconHandleVSHPROPID_OpenFolderIconHandle が使用されている場合) を実装します。

  3. 拡張ポイントから要求された場合にアイコンの "レガシ" バージョンを作成するように、アイコンの元の VSHPROPID の実装を変更します。 IVsImageService2 には、このようなアイコンを取得するために必要な機能があります。

    VB および C# プロジェクトのフレーバーのための追加要件

    プロジェクトが最も外側のフレーバーであることを検出した場合にのみ、VSHPROPID_SupportsIconMonikers を実装します。 そうしないと、実際には最も外側のフレーバーがイメージ モニカーをサポートしていない場合あり、カスタマイズされた画像がベース フレーバーによって実質的に "隠される" 可能性があります。

    CPS でイメージ モニカーを使用する方法

    CPS (Common Project System) でカスタム画像を設定するには、手動で行うか、Project System Extensibility SDK に付属の項目テンプレートを使用します。

    Project System Extensibility SDK の使用

    プロジェクトの種類または項目の種類に対してカスタム アイコンを用意する」の手順に従って CPS 画像をカスタマイズします。 CPS の詳細については、Visual Studio プロジェクト システムの機能拡張に関するドキュメントを参照してください。

    ImageMoniker を手動で使用する

  4. プロジェクト システムで IProjectTreeModifier インターフェイスを実装してエクスポートします。

  5. KnownMoniker とカスタム イメージ モニカーのどちらを使用するかを決定します。

  6. ApplyModifications メソッドで、新しいツリーを返す前に、メソッド内のどこかで次の例のような処理を行います。

    // Replace this KnownMoniker with your desired ImageMoniker
    tree = tree.SetIcon(KnownMonikers.Blank.ToProjectSystemType());
    
  7. 新しいツリーを作成する場合は、次の例のように、目的のモニカーを NewTree メソッドに渡すことでカスタム画像を設定できます。

    // Replace this KnownMoniker with your desired ImageMoniker
    ProjectImageMoniker icon         = KnownMonikers.FolderClosed.ToProjectSystemType();
    ProjectImageMoniker expandedIcon = KnownMonikers.FolderOpened.ToProjectSystemType();
    
    return this.ProjectTreeFactory.Value.NewTree(/*caption*/<value>,
                                                 /*filePath*/<value>,
                                                 /*browseObjectProperties*/<value>,
                                                 icon,
                                                 expandedIcon);
    

実際のイメージ ストリップからモニカーベースのイメージ ストリップに変換する方法

HIMAGELIST をサポートする必要がある

コードに既存のイメージ ストリップがあり、イメージ サービスを使用するために更新したいが、画像リストの受け渡しを必要とする API の制約がある場合でも、イメージ サービスのメリットを受けられます。 モニカーベースのイメージ ストリップを作成するには、次の手順に従って、既存のモニカーからマニフェストを作成します。

  1. ManifestFromResources ツールを実行し、イメージ ストリップを渡します。 これにより、ストリップのマニフェストが生成されます。

    • 推奨: 用途に合わせて、マニフェストに既定値ではない名前を付けてください。
  2. KnownMonikers のみを使用している場合は、以下を実行します。

    • マニフェストの <Images> セクションを <Images/> に置き換えます。

    • すべてのサブ画像 ID (<imagestrip name>_## が付いているもの) を削除します。

    • 推奨: 用途に合わせて、AssetsGuid シンボルとイメージ ストリップ シンボルの名前を変更します。

    • ContainedImage の GUID を $(ImageCatalogGuid) に置き換え、各 ContainedImage の ID を $(<moniker>) に置き換え、各 ContainedImage に External="true" 属性を追加します。

      • <moniker> は、画像と一致する KnownMoniker に置き換えますが、"KnownMonikers." を名前から削除する必要があります。
    • <Symbols> セクションの一番上に、<Import Manifest="$(ManifestFolder)\<Relative install dir path to *>\Microsoft.VisualStudio.ImageCatalog.imagemanifest" /*> を追加します。

      • 相対パスは、マニフェストの設定作成に定義されている配置場所によって決まります。
  3. ManifestToCode ツールを実行してラッパーを生成し、イメージ サービスにイメージ ストリップを照会するために使用できるモニカーを、既存のコードが持つようにします。

    • 推奨: 用途に合わせて、ラッパーと名前空間に既定値ではない名前を付けてください。
  4. イメージ サービスと新しいファイルを使用できるように、すべての追加、設定の作成と配置、その他のコード変更を行います。

    内部と外部の画像の両方を含むサンプル マニフェストを使用して、どのように表示されるかを確認します。

<?xml version="1.0"?>
<ImageManifest
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns="http://schemas.microsoft.com/VisualStudio/ImageManifestSchema/2014">

  <Symbols>
    <!-- This needs to be the relative path from your manifest to the ImageCatalog's manifest
         where $(ManifestFolder) is the deployed location of this manifest. -->
    <Import Manifest="$(ManifestFolder)\<RelPath>\Microsoft.VisualStudio.ImageCatalog.imagemanifest" />

    <String Name="Resources" Value="/My.Assembly.Name;Component/Resources/ImageStrip" />
    <Guid Name="ImageGuid" Value="{fb41b7ef-6587-480c-aa27-5b559d42cfc9}" />
    <Guid Name="ImageStripGuid" Value="{9c84a570-d9a7-4052-a340-188fb276f973}" />
    <ID Name="MyImage_0" Value="100" />
    <ID Name="MyImage_1" Value="101" />
    <ID Name="InternalList" Value="1001" />
    <ID Name="ExternalList" Value="1002" />
  </Symbols>

  <Images>
    <Image Guid="$(ImageGuid)" ID="$(MyImage_0)">
      <Source Uri="$(Resources)/MyImage_0.png">
        <Size Value="16" />
      </Source>
    </Image>
    <Image Guid="$(ImageGuid)" ID="$(MyImage_1)">
      <Source Uri="$(Resources)/MyImage_1.png">
        <Size Value="16" />
      </Source>
    </Image>
  </Images>

  <ImageLists>
    <ImageList Guid="$(ImageStripGuid)" ID="$(InternalList)">
      <ContainedImage Guid="$(ImageGuid)" ID="$(MyImage_0)" />
      <ContainedImage Guid="$(ImageGuid)" ID="$(MyImage_1)" />
    </ImageList>
    <ImageList Guid="$(ImageStripGuid)" ID="$(ExternalList)">
      <ContainedImage Guid="$(ImageCatalogGuid)" ID="$(StatusError)" External="true" />
      <ContainedImage Guid="$(ImageCatalogGuid)" ID="$(StatusWarning)" External="true" />
      <ContainedImage Guid="$(ImageCatalogGuid)" ID="$(StatusInformation)" External="true" />
    </ImageList>
  </ImageLists>

</ImageManifest>

HIMAGELIST をサポートする必要がない

  1. イメージ ストリップ内の画像と一致する KnownMonikers のセットを決定するか、イメージ ストリップ内の画像に独自のモニカーを作成します。

  2. イメージ ストリップ内の必要なインデックスにある画像を取得するために使用したマッピングを、代わりにモニカーを使用するように更新します。

  3. イメージ サービスを使用し、更新されたマッピングを介してモニカーを要求するようにコードを更新します (これは、場合によっては、マネージド コードのために CrispImages に更新することや、イメージ サービスから HBITMAP または HICON を要求してネイティブ コードのために受け渡しすることになります)。

画像のテスト

Image Library Viewer ツールを使用すると、イメージ マニフェストをテストし、すべてが正しく作成されていることを確認できます。 このツールは Visual Studio 2015 SDK に含まれています。 このツールやその他のツールのドキュメントについては、こちらを参照してください。

その他のリソース

サンプル

さまざまな Visual Studio 拡張ポイントの一部としてイメージ サービスを使用する方法を示すために、GitHub 上の Visual Studio サンプルのいくつかが更新されています。が示されています。

最新のサンプルについては、http://github.com/Microsoft/VSSDK-Extensibility-Samples を参照してください。

ツール

イメージ サービスと連携する UI の作成と更新を支援するために、イメージ サービスの一連のサポート ツールが作成されました。 各ツールの詳細については、ツールに付属のドキュメントを参照してください。 これらのツールは、Visual Studio 2015 SDK の一部として含まれています。

ManifestFromResources

Manifest from Resources ツールを使用すると、画像リソース (PNG または XAML) の一覧を取得し、それらの画像をイメージ サービスで使用するためのイメージ マニフェスト ファイルを生成できます。

ManifestToCode

Manifest to Code ツールを使用すると、イメージ マニフェスト ファイルを受け取り、コード (C++、C#、または VB) または .vsct ファイルのマニフェスト値を参照するためのラッパー ファイルを生成できます。

ImageLibraryViewer

Image Library Viewer ツールを使用すると、イメージ マニフェストを読み込むことができます。また、ユーザーはマニフェストが正しく作成されるように Visual Studio と同じ方法で操作することができます。 ユーザーは、背景、サイズ、DPI 設定、ハイ コントラストなどの設定を変更できます。 また、マニフェスト内のエラーを検出する読み込み情報も表示され、マニフェスト内の各画像のソース情報が表示されます。

よく寄せられる質問

  • <Reference Include="Microsoft.VisualStudio.*.Interop.14.0.DesignTime" /> を読み込むときに含める必要がある依存関係はありますか?

    • すべての相互運用 DLL に EmbedInteropTypes="true" を設定します。
  • イメージ マニフェストを拡張機能と一緒に配置するにはどうすればよいですか。

    • .imagemanifest ファイルをプロジェクトに追加します。

    • "Include in VSIX" を True に設定します。

  • 画像がまだ表示されないのですが、何が原因かを調べるにはどうすればよいですか?

    • Visual Studio が画像マニフェストを見つけられない可能性があります。 パフォーマンス上の理由から、Visual Studio ではフォルダーの検索の深さが制限されています。そのため、画像マニフェストは拡張機能のルート フォルダーに保存することをお勧めします。

    • 画像マニフェスト ファイルにアセンブリ情報が欠落している可能性があります。 厳密に名前付けされたアセンブリは、Visual Studio によって読み込まれるためには追加の情報が必要になります。 厳密に名前付けされたアセンブリを読み込むには、画像マニフェスト内の画像のリソース URI に、(アセンブリの名前に加えて) アセンブリのバージョンと公開キー トークンを含める必要があります。

      <ImageManifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/VisualStudio/ImageManifestSchema/2014">
        <Symbols>
          <String Name="Resources" Value="/Microsoft.VisualStudio.Shell.UI.Internal;v17.0.0.0;b03f5f7f11d50a3a;Component/Resources" />
          ...
        </Symbols>
        ...
      </ImageManifest>
      
    • 画像アセンブリのコードベース エントリが欠落している可能性があります。 Visual Studio がアセンブリを必要とする時点でアセンブリがまだ読み込まれていない場合、読み込むためには Visual Studio がアセンブリの場所を特定する必要があります。 アセンブリのコードベースを追加するには、ProvideCodeBaseAttribute を使用して、コードベース エントリが生成され、拡張機能の pkgdef に含まれるようにします。

      [assembly: ProvideCodeBase(AssemblyName = "ClassLibrary1", Version = "1.0.0.0", CodeBase = "$PackageFolder$\\ClassLibrary1.dll")]
      
    • 前述の方法で画像の読み込みの問題が解決しない場合は、拡張機能の pkgdef に次のエントリを追加して、ログを有効にすることができます。

      [$RootKey$\ImageLibrary]
      "TraceLevel"="Verbose"
      "TraceFilename"="ImageLibrary.log"
      

      これにより、%UserProfile% フォルダーに ImageLibrary.log というログ ファイルが作成されます。 これらのエントリを pkgdef に追加したら、開発者コマンド プロンプトから「devenv /updateConfiguration」を実行してください。 これにより、ログ エントリが有効になり、VS で画像マニフェスト キャッシュが更新されて、画像マニフェストの読み取り時に発生する可能性のあるエラーを見つけやすくなります。 その後、画像の読み込みが想定されるシナリオを実行すると、ログ ファイルには、画像の登録ログと要求ログの両方が含まれます。

  • CPS プロジェクト システムを更新しています。 ImageNameStockIconService はどうなりましたか。

    • モニカーを使用するように CPS が更新されたときに、これらは削除されました。 StockIconService を呼び出す必要はなくなりました。CPS ユーティリティで、ToProjectSystemType() 拡張メソッドを使用して、単に目的の KnownMoniker をメソッドまたはプロパティに渡してください。 ImageName から KnownMonikers へのマッピングは次のとおりです。

      ImageName KnownMoniker
      ImageName.OfflineWebApp KnownImageIds.Web
      ImageName.WebReferencesFolder KnownImageIds.Web
      ImageName.OpenReferenceFolder KnownImageIds.FolderOpened
      ImageName.ReferenceFolder KnownImageIds.Reference
      ImageName.Reference KnownImageIds.Reference
      ImageName.SdlWebReference KnownImageIds.WebReferenceFolder
      ImageName.DiscoWebReference KnownImageIds.DynamicDiscoveryDocument
      ImageName.Folder KnownImageIds.FolderClosed
      ImageName.OpenFolder KnownImageIds.FolderOpened
      ImageName.ExcludedFolder KnownImageIds.HiddenFolderClosed
      ImageName.OpenExcludedFolder KnownImageIds.HiddenFolderOpened
      ImageName.ExcludedFile KnownImageIds.HiddenFile
      ImageName.DependentFile KnownImageIds.GenerateFile
      ImageName.MissingFile KnownImageIds.DocumentWarning
      ImageName.WindowsForm KnownImageIds.WindowsForm
      ImageName.WindowsUserControl KnownImageIds.UserControl
      ImageName.WindowsComponent KnownImageIds.ComponentFile
      ImageName.XmlSchema KnownImageIds.XMLSchema
      ImageName.XmlFile KnownImageIds.XMLFile
      ImageName.WebForm KnownImageIds.Web
      ImageName.WebService KnownImageIds.WebService
      ImageName.WebUserControl KnownImageIds.WebUserControl
      ImageName.WebCustomUserControl KnownImageIds.WebCustomControl
      ImageName.AspPage KnownImageIds.ASPFile
      ImageName.GlobalApplicationClass KnownImageIds.SettingsFile
      ImageName.WebConfig KnownImageIds.ConfigurationFile
      ImageName.HtmlPage KnownImageIds.HTMLFile
      ImageName.StyleSheet KnownImageIds.StyleSheet
      ImageName.ScriptFile KnownImageIds.JSScript
      ImageName.TextFile KnownImageIds.Document
      ImageName.SettingsFile KnownImageIds.Settings
      ImageName.Resources KnownImageIds.DocumentGroup
      ImageName.Bitmap KnownImageIds.Image
      ImageName.Icon KnownImageIds.IconFile
      ImageName.Image KnownImageIds.Image
      ImageName.ImageMap KnownImageIds.ImageMapFile
      ImageName.XWorld KnownImageIds.XWorldFile
      ImageName.Audio KnownImageIds.Sound
      ImageName.Video KnownImageIds.Media
      ImageName.Cab KnownImageIds.CABProject
      ImageName.Jar KnownImageIds.JARFile
      ImageName.DataEnvironment KnownImageIds.DataTable
      ImageName.PreviewFile KnownImageIds.Report
      ImageName.DanglingReference KnownImageIds.ReferenceWarning
      ImageName.XsltFile KnownImageIds.XSLTransform
      ImageName.Cursor KnownImageIds.CursorFile
      ImageName.AppDesignerFolder KnownImageIds.Property
      ImageName.Data KnownImageIds.Database
      ImageName.Application KnownImageIds.Application
      ImageName.DataSet KnownImageIds.DatabaseGroup
      ImageName.Pfx KnownImageIds.Certificate
      ImageName.Snk KnownImageIds.Rule
      ImageName.VisualBasicProject KnownImageIds.VBProjectNode
      ImageName.CSharpProject KnownImageIds.CSProjectNode
      ImageName.Empty KnownImageIds.Blank
      ImageName.MissingFolder KnownImageIds.FolderOffline
      ImageName.SharedImportReference KnownImageIds.SharedProject
      ImageName.SharedProjectCs KnownImageIds.CSSharedProject
      ImageName.SharedProjectVc KnownImageIds.CPPSharedProject
      ImageName.SharedProjectJs KnownImageIds.JSSharedProject
      ImageName.CSharpCodeFile KnownImageIds.CSFileNode
      ImageName.VisualBasicCodeFile KnownImageIds.VBFileNode
  • 入力候補一覧プロバイダーを更新しています。 以前の StandardGlyphGroupStandardGlyph の値と一致する KnownMonikers は何ですか。

    Name Name Name
    GlyphGroupClass GlyphItemPublic ClassPublic
    GlyphGroupClass GlyphItemInternal ClassInternal
    GlyphGroupClass GlyphItemFriend ClassInternal
    GlyphGroupClass GlyphItemProtected ClassProtected
    GlyphGroupClass GlyphItemPrivate ClassPrivate
    GlyphGroupClass GlyphItemShortcut ClassShortcut
    GlyphGroupConstant GlyphItemPublic ConstantPublic
    GlyphGroupConstant GlyphItemInternal ConstantInternal
    GlyphGroupConstant GlyphItemFriend ConstantInternal
    GlyphGroupConstant GlyphItemProtected ConstantProtected
    GlyphGroupConstant GlyphItemPrivate ConstantPrivate
    GlyphGroupConstant GlyphItemShortcut ConstantShortcut
    GlyphGroupDelegate GlyphItemPublic DelegatePublic
    GlyphGroupDelegate GlyphItemInternal DelegateInternal
    GlyphGroupDelegate GlyphItemFriend DelegateInternal
    GlyphGroupDelegate GlyphItemProtected DelegateProtected
    GlyphGroupDelegate GlyphItemPrivate DelegatePrivate
    GlyphGroupDelegate GlyphItemShortcut DelegateShortcut
    GlyphGroupEnum GlyphItemPublic EnumerationPublic
    GlyphGroupEnum GlyphItemInternal EnumerationInternal
    GlyphGroupEnum GlyphItemFriend EnumerationInternal
    GlyphGroupEnum GlyphItemProtected EnumerationProtected
    GlyphGroupEnum GlyphItemPrivate EnumerationPrivate
    GlyphGroupEnum GlyphItemShortcut EnumerationShortcut
    GlyphGroupEnumMember GlyphItemPublic EnumerationItemPublic
    GlyphGroupEnumMember GlyphItemInternal EnumerationItemInternal
    GlyphGroupEnumMember GlyphItemFriend EnumerationItemInternal
    GlyphGroupEnumMember GlyphItemProtected EnumerationItemProtected
    GlyphGroupEnumMember GlyphItemPrivate EnumerationItemPrivate
    GlyphGroupEnumMember GlyphItemShortcut EnumerationItemShortcut
    GlyphGroupEvent GlyphItemPublic EventPublic
    GlyphGroupEvent GlyphItemInternal EventInternal
    GlyphGroupEvent GlyphItemFriend EventInternal
    GlyphGroupEvent GlyphItemProtected EventProtected
    GlyphGroupEvent GlyphItemPrivate EventPrivate
    GlyphGroupEvent GlyphItemShortcut EventShortcut
    GlyphGroupException GlyphItemPublic ExceptionPublic
    GlyphGroupException GlyphItemInternal ExceptionInternal
    GlyphGroupException GlyphItemFriend ExceptionInternal
    GlyphGroupException GlyphItemProtected ExceptionProtected
    GlyphGroupException GlyphItemPrivate ExceptionPrivate
    GlyphGroupException GlyphItemShortcut ExceptionShortcut
    GlyphGroupField GlyphItemPublic FieldPublic
    GlyphGroupField GlyphItemInternal FieldInternal
    GlyphGroupField GlyphItemFriend FieldInternal
    GlyphGroupField GlyphItemProtected FieldProtected
    GlyphGroupField GlyphItemPrivate FieldPrivate
    GlyphGroupField GlyphItemShortcut FieldShortcut
    GlyphGroupInterface GlyphItemPublic InterfacePublic
    GlyphGroupInterface GlyphItemInternal InterfaceInternal
    GlyphGroupInterface GlyphItemFriend InterfaceInternal
    GlyphGroupInterface GlyphItemProtected InterfaceProtected
    GlyphGroupInterface GlyphItemPrivate InterfacePrivate
    GlyphGroupInterface GlyphItemShortcut InterfaceShortcut
    GlyphGroupMacro GlyphItemPublic MacroPublic
    GlyphGroupMacro GlyphItemInternal MacroInternal
    GlyphGroupMacro GlyphItemFriend MacroInternal
    GlyphGroupMacro GlyphItemProtected MacroProtected
    GlyphGroupMacro GlyphItemPrivate MacroPrivate
    GlyphGroupMacro GlyphItemShortcut MacroShortcut
    GlyphGroupMap GlyphItemPublic MapPublic
    GlyphGroupMap GlyphItemInternal MapInternal
    GlyphGroupMap GlyphItemFriend MapInternal
    GlyphGroupMap GlyphItemProtected MapProtected
    GlyphGroupMap GlyphItemPrivate MapPrivate
    GlyphGroupMap GlyphItemShortcut MapShortcut
    GlyphGroupMapItem GlyphItemPublic MapItemPublic
    GlyphGroupMapItem GlyphItemInternal MapItemInternal
    GlyphGroupMapItem GlyphItemFriend MapItemInternal
    GlyphGroupMapItem GlyphItemProtected MapItemProtected
    GlyphGroupMapItem GlyphItemPrivate MapItemPrivate
    GlyphGroupMapItem GlyphItemShortcut MapItemShortcut
    GlyphGroupMethod GlyphItemPublic MethodPublic
    GlyphGroupMethod GlyphItemInternal MethodInternal
    GlyphGroupMethod GlyphItemFriend MethodInternal
    GlyphGroupMethod GlyphItemProtected MethodProtected
    GlyphGroupMethod GlyphItemPrivate MethodPrivate
    GlyphGroupMethod GlyphItemShortcut MethodShortcut
    GlyphGroupOverload GlyphItemPublic MethodPublic
    GlyphGroupOverload GlyphItemInternal MethodInternal
    GlyphGroupOverload GlyphItemFriend MethodInternal
    GlyphGroupOverload GlyphItemProtected MethodProtected
    GlyphGroupOverload GlyphItemPrivate MethodPrivate
    GlyphGroupOverload GlyphItemShortcut MethodShortcut
    GlyphGroupModule GlyphItemPublic ModulePublic
    GlyphGroupModule GlyphItemInternal ModuleInternal
    GlyphGroupModule GlyphItemFriend ModuleInternal
    GlyphGroupModule GlyphItemProtected ModuleProtected
    GlyphGroupModule GlyphItemPrivate ModulePrivate
    GlyphGroupModule GlyphItemShortcut ModuleShortcut
    GlyphGroupNamespace GlyphItemPublic NamespacePublic
    GlyphGroupNamespace GlyphItemInternal NamespaceInternal
    GlyphGroupNamespace GlyphItemFriend NamespaceInternal
    GlyphGroupNamespace GlyphItemProtected NamespaceProtected
    GlyphGroupNamespace GlyphItemPrivate NamespacePrivate
    GlyphGroupNamespace GlyphItemShortcut NamespaceShortcut
    GlyphGroupOperator GlyphItemPublic OperatorPublic
    GlyphGroupOperator GlyphItemInternal OperatorInternal
    GlyphGroupOperator GlyphItemFriend OperatorInternal
    GlyphGroupOperator GlyphItemProtected OperatorProtected
    GlyphGroupOperator GlyphItemPrivate OperatorPrivate
    GlyphGroupOperator GlyphItemShortcut OperatorShortcut
    GlyphGroupProperty GlyphItemPublic PropertyPublic
    GlyphGroupProperty GlyphItemInternal PropertyInternal
    GlyphGroupProperty GlyphItemFriend PropertyInternal
    GlyphGroupProperty GlyphItemProtected PropertyProtected
    GlyphGroupProperty GlyphItemPrivate PropertyPrivate
    GlyphGroupProperty GlyphItemShortcut PropertyShortcut
    GlyphGroupStruct GlyphItemPublic StructurePublic
    GlyphGroupStruct GlyphItemInternal StructureInternal
    GlyphGroupStruct GlyphItemFriend StructureInternal
    GlyphGroupStruct GlyphItemProtected StructureProtected
    GlyphGroupStruct GlyphItemPrivate StructurePrivate
    GlyphGroupStruct GlyphItemShortcut StructureShortcut
    GlyphGroupTemplate GlyphItemPublic TemplatePublic
    GlyphGroupTemplate GlyphItemInternal TemplateInternal
    GlyphGroupTemplate GlyphItemFriend TemplateInternal
    GlyphGroupTemplate GlyphItemProtected TemplateProtected
    GlyphGroupTemplate GlyphItemPrivate TemplatePrivate
    GlyphGroupTemplate GlyphItemShortcut TemplateShortcut
    GlyphGroupTypedef GlyphItemPublic TypeDefinitionPublic
    GlyphGroupTypedef GlyphItemInternal TypeDefinitionInternal
    GlyphGroupTypedef GlyphItemFriend TypeDefinitionInternal
    GlyphGroupTypedef GlyphItemProtected TypeDefinitionProtected
    GlyphGroupTypedef GlyphItemPrivate TypeDefinitionPrivate
    GlyphGroupTypedef GlyphItemShortcut TypeDefinitionShortcut
    GlyphGroupType GlyphItemPublic TypePublic
    GlyphGroupType GlyphItemInternal TypeInternal
    GlyphGroupType GlyphItemFriend TypeInternal
    GlyphGroupType GlyphItemProtected TypeProtected
    GlyphGroupType GlyphItemPrivate TypePrivate
    GlyphGroupType GlyphItemShortcut TypeShortcut
    GlyphGroupUnion GlyphItemPublic UnionPublic
    GlyphGroupUnion GlyphItemInternal UnionInternal
    GlyphGroupUnion GlyphItemFriend UnionInternal
    GlyphGroupUnion GlyphItemProtected UnionProtected
    GlyphGroupUnion GlyphItemPrivate UnionPrivate
    GlyphGroupUnion GlyphItemShortcut UnionShortcut
    GlyphGroupVariable GlyphItemPublic FieldPublic
    GlyphGroupVariable GlyphItemInternal FieldInternal
    GlyphGroupVariable GlyphItemFriend FieldInternal
    GlyphGroupVariable GlyphItemProtected FieldProtected
    GlyphGroupVariable GlyphItemPrivate FieldPrivate
    GlyphGroupVariable GlyphItemShortcut FieldShortcut
    GlyphGroupValueType GlyphItemPublic ValueTypePublic
    GlyphGroupValueType GlyphItemInternal ValueTypeInternal
    GlyphGroupValueType GlyphItemFriend ValueTypeInternal
    GlyphGroupValueType GlyphItemProtected ValueTypeProtected
    GlyphGroupValueType GlyphItemPrivate ValueTypePrivate
    GlyphGroupValueType GlyphItemShortcut ValueTypeShortcut
    GlyphGroupIntrinsic GlyphItemPublic ObjectPublic
    GlyphGroupIntrinsic GlyphItemInternal ObjectInternal
    GlyphGroupIntrinsic GlyphItemFriend ObjectInternal
    GlyphGroupIntrinsic GlyphItemProtected ObjectProtected
    GlyphGroupIntrinsic GlyphItemPrivate ObjectPrivate
    GlyphGroupIntrinsic GlyphItemShortcut ObjectShortcut
    GlyphGroupJSharpMethod GlyphItemPublic MethodPublic
    GlyphGroupJSharpMethod GlyphItemInternal MethodInternal
    GlyphGroupJSharpMethod GlyphItemFriend MethodInternal
    GlyphGroupJSharpMethod GlyphItemProtected MethodProtected
    GlyphGroupJSharpMethod GlyphItemPrivate MethodPrivate
    GlyphGroupJSharpMethod GlyphItemShortcut MethodShortcut
    GlyphGroupJSharpField GlyphItemPublic FieldPublic
    GlyphGroupJSharpField GlyphItemInternal FieldInternal
    GlyphGroupJSharpField GlyphItemFriend FieldInternal
    GlyphGroupJSharpField GlyphItemProtected FieldProtected
    GlyphGroupJSharpField GlyphItemPrivate FieldPrivate
    GlyphGroupJSharpField GlyphItemShortcut FieldShortcut
    GlyphGroupJSharpClass GlyphItemPublic ClassPublic
    GlyphGroupJSharpClass GlyphItemInternal ClassInternal
    GlyphGroupJSharpClass GlyphItemFriend ClassInternal
    GlyphGroupJSharpClass GlyphItemProtected ClassProtected
    GlyphGroupJSharpClass GlyphItemPrivate ClassPrivate
    GlyphGroupJSharpClass GlyphItemShortcut ClassShortcut
    GlyphGroupJSharpNamespace GlyphItemPublic NamespacePublic
    GlyphGroupJSharpNamespace GlyphItemInternal NamespaceInternal
    GlyphGroupJSharpNamespace GlyphItemFriend NamespaceInternal
    GlyphGroupJSharpNamespace GlyphItemProtected NamespaceProtected
    GlyphGroupJSharpNamespace GlyphItemPrivate NamespacePrivate
    GlyphGroupJSharpNamespace GlyphItemShortcut NamespaceShortcut
    GlyphGroupJSharpInterface GlyphItemPublic InterfacePublic
    GlyphGroupJSharpInterface GlyphItemInternal InterfaceInternal
    GlyphGroupJSharpInterface GlyphItemFriend InterfaceInternal
    GlyphGroupJSharpInterface GlyphItemProtected InterfaceProtected
    GlyphGroupJSharpInterface GlyphItemPrivate InterfacePrivate
    GlyphGroupJSharpInterface GlyphItemShortcut InterfaceShortcut
    GlyphGroupError StatusError
    GlyphBscFile ClassFile
    GlyphAssembly リファレンス
    GlyphLibrary ライブラリ
    GlyphVBProject VBProjectNode
    GlyphCoolProject CSProjectNode
    GlyphCppProject CPPProjectNode
    GlyphDialogId ダイアログ
    GlyphOpenFolder FolderOpened
    GlyphClosedFolder FolderClosed
    GlyphArrow GoToNext
    GlyphCSharpFile CSFileNode
    GlyphCSharpExpansion スニペット
    GlyphKeyword IntellisenseKeyword
    GlyphInformation StatusInformation
    GlyphReference ClassMethodReference
    GlyphRecursion 再帰
    GlyphXmlItem Tag
    GlyphJSharpProject DocumentCollection
    GlyphJSharpDocument Document
    GlyphForwardType GoToNext
    GlyphCallersGraph CallTo
    GlyphCallGraph CallFrom
    GlyphWarning StatusWarning
    GlyphMaybeReference QuestionMark
    GlyphMaybeCaller CallTo
    GlyphMaybeCall CallFrom
    GlyphExtensionMethod ExtensionMethod
    GlyphExtensionMethodInternal ExtensionMethod
    GlyphExtensionMethodFriend ExtensionMethod
    GlyphExtensionMethodProtected ExtensionMethod
    GlyphExtensionMethodPrivate ExtensionMethod
    GlyphExtensionMethodShortcut ExtensionMethod
    GlyphXmlAttribute XmlAttribute
    GlyphXmlChild XmlElement
    GlyphXmlDescendant XmlDescendant
    GlyphXmlNamespace XmlNamespace
    GlyphXmlAttributeQuestion XmlAttributeLowConfidence
    GlyphXmlAttributeCheck XmlAttributeHighConfidence
    GlyphXmlChildQuestion XmlElementLowConfidence
    GlyphXmlChildCheck XmlElementHighConfidence
    GlyphXmlDescendantQuestion XmlDescendantLowConfidence
    GlyphXmlDescendantCheck XmlDescendantHighConfidence
    GlyphCompletionWarning IntellisenseWarning