Služba a katalog imagí

Tato kuchařka obsahuje pokyny a osvědčené postupy pro přijetí služby Image a katalogu obrázků sady Visual Studio představené v sadě Visual Studio 2015.

Služba image představená v sadě Visual Studio 2015 umožňuje vývojářům získat nejlepší obrázky pro zařízení a zvolený motiv uživatele k zobrazení obrázku, včetně jejich oprav pro kontext, ve kterém se zobrazují. Přijetí služby image pomůže eliminovat hlavní problémy související s údržbou prostředků, HDPI škálování a motivy.

Problémy dnes Řešení
Prolnutí barev pozadí Předdefinované alfa prolnutí
Motivy (některé) obrázky Metadata motivu
Režim vysoký kontrast Alternativní prostředky s vysokým kontrastem
Potřeba více prostředků pro různé režimy DPI Výběrové prostředky s náhradními prostředky založenými na vektorech
Duplicitní obrázky Jeden identifikátor na koncept obrázku

Proč přijmout službu image?

  • Vždy získejte nejnovější obrázek "pixel-perfect" ze sady Visual Studio.

  • Můžete odesílat a používat vlastní image.

  • Při přidání nového měřítka DPI ve Windows nemusíte obrázky testovat.

  • Řešení starých překážek architektury v implementacích

    Panel nástrojů prostředí sady Visual Studio před a po použití služby image:

    Image Service Before a After

Jak to funguje

Služba image může poskytnout rastrový obrázek vhodný pro jakoukoli podporovanou architekturu uživatelského rozhraní:

  • WPF: BitmapSource

  • WinForms: System.Drawing.Bitmap

  • Win32: HBITMAP

    Obrázek diagramu toku služby

    Diagram toku služby image

    Obrázky monikers

    Moniker image (nebo moniker for short) je dvojice GUID/ID, která jedinečně identifikuje prostředek image nebo prostředek seznamu obrázků v knihovně obrázků.

    Známé monikers

    Sada monikerů obrázků obsažených v katalogu imagí sady Visual Studio a veřejně využitelná libovolnou komponentou nebo rozšířením sady Visual Studio.

    Soubory manifestu obrázku

    Soubory manifestu obrázku (.imagemanifest) jsou soubory XML, které definují sadu prostředků image, monikery, které představují tyto prostředky, a skutečný obrázek nebo obrázky, které představují každý prostředek. Manifesty obrázků můžou definovat samostatné image nebo seznamy obrázků pro podporu starší verze uživatelského rozhraní. Kromě toho existují atributy, které lze nastavit buď u prostředku, nebo na jednotlivých obrázcích za každým assetem, aby se změnilo, kdy a jak se tyto prostředky zobrazují.

    Schéma manifestu obrázku

    Úplný manifest obrázku vypadá takto:

<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>

Symboly

Jako pomůcku pro čitelnost a údržbu může manifest obrázku používat symboly pro hodnoty atributů. Symboly jsou definovány takto:

<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>
Dílčím Definice
Import Importuje symboly daného souboru manifestu pro použití v aktuálním manifestu.
Guid Symbol představuje identifikátor GUID a musí odpovídat formátování GUID.
ID Symbol představuje ID a musí být nenegativní celé číslo.
String Symbol představuje libovolnou řetězcovou hodnotu.

Symboly rozlišují malá a velká písmena a odkazují se na ni pomocí syntaxe $(symbol-name):

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

Některé symboly jsou předdefinované pro všechny manifesty. Ty lze použít v atributu <Uri prvku Source> nebo <Import> k odkazování cest na místním počítači.

Symbol Popis
CommonProgramFiles Hodnota proměnné prostředí %CommonProgramFiles%
LocalAppData Hodnota proměnné prostředí %LocalAppData%
ManifestFolder Složka obsahující soubor manifestu
Dokumenty Úplná cesta ke složce Dokumenty aktuálního uživatele
ProgramFiles Hodnota proměnné prostředí %ProgramFiles%
Systémový Složka Windows\System32
WinDir Hodnota proměnné prostředí %WinDir%

Obrázek

Element <Image> definuje image, na kterou lze odkazovat pomocí monikeru. Identifikátor GUID a ID pořízené společně tvoří moniker image. Moniker obrázku musí být jedinečný v celé knihovně obrázků. Pokud má daný moniker více než jeden obrázek, první obrázek, ke kterému došlo při vytváření knihovny, je ten, který je zachován.

Musí obsahovat alespoň jeden zdroj. Zdroje neutrální velikosti poskytnou nejlepší výsledky v široké škále velikostí, ale nevyžadují se. Pokud je služba požádána o obrázek velikosti, která není definovaná v <prvku Image> a neexistuje žádný zdroj neutrální velikosti, služba zvolí nejlepší zdroj specifický pro danou velikost a škáluje ho na požadovanou velikost.

<Image Guid="guid" ID="int" AllowColorInversion="true/false">
      <Source ... />
      <!-- optional additional Source elements -->
</Image>
Atribut Definice
Guid [Povinné] Část identifikátoru GUID v monikeru obrázku
ID [Povinné] Část ID monikeru obrázku
AllowColorInversion [Volitelné, výchozí hodnota true] Označuje, jestli může mít obrázek barvy invertované programově při použití na tmavém pozadí.

Source

Element <Source> definuje jeden zdrojový prostředek obrázku (XAML a PNG).

<Source Uri="uri" Background="background">
      <!-- optional NativeResource element -->
 </Source>
Atribut Definice
Identifikátor URI [Povinné] Identifikátor URI, který definuje, odkud lze image načíst. Může se zobrazit některý z následujících:

– Identifikátor URI balíčku používající autoritu application:///
– Absolutní referenční informace k prostředkům komponenty
– Cesta k souboru obsahujícímu nativní prostředek
Pozadí [Volitelné] Určuje, co se má zdroj použít na pozadí.

Může se zobrazit některý z následujících:

Světlo: Zdroj lze použít na světlém pozadí.

Tmavá: Zdroj lze použít na tmavém pozadí.

HighContrast: Zdroj lze použít na libovolném pozadí v režimu Vysoký kontrast.

HighContrastLight: Zdroj lze použít na světlém pozadí v režimu Vysoký kontrast.

HighContrastDark: Zdroj lze použít na tmavém pozadí v režimu Vysoký kontrast.

Pokud atribut Background vynecháte, lze zdroj použít na libovolném pozadí.

Pokud je pozadí světlé, tmavé, HighContrastLight nebo HighContrastDark, barvy zdroje se nikdy invertují. Pokud je pozadí vynecháno nebo nastaveno na HighContrast, inverze zdrojových barev je řízena atributem AllowColorInversion obrázku.

<Zdrojový> prvek může mít přesně jeden z následujících volitelných dílčích prvků:

Element Atributy (všechny povinné) Definice
<Velikost> Hodnota Zdroj se použije pro obrázky dané velikosti (v jednotkách zařízení). Obrázek bude čtvercový.
<SizeRange> MinSize, MaxSize Zdroj se použije pro obrázky z MinSize na MaxSize (v jednotkách zařízení) včetně. Obrázek bude čtvercový.
<Dimenze> Šířka, Výška Zdroj se použije pro obrázky dané šířky a výšky (v jednotkách zařízení).
<DimensionRange> MinWidth, MinHeight,

MaxWidth, MaxHeight
Zdroj se použije pro obrázky z minimální šířky/výšky až po maximální šířku/výšku (v jednotkách zařízení).

<Zdrojový> prvek může mít také volitelný <subelement NativeResource>, který definuje <zdroj>, který je načten z nativního sestavení, a nikoli spravované sestavení.

<NativeResource Type="type" ID="int" />
Atribut Definice
Typ [Povinné] Typ nativního prostředku, XAML nebo PNG
ID [Povinné] Část ID celého čísla nativního prostředku

ImageList

Element <ImageList> definuje kolekci obrázků, které lze vrátit v jednom pruhu. Pás je podle potřeby postaven na poptávce.

<ImageList>
      <ContainedImage Guid="guid" ID="int" External="true/false" />
      <!-- optional additional ContainedImage elements -->
 </ImageList>
Atribut Definice
Guid [Povinné] Část identifikátoru GUID v monikeru obrázku
ID [Povinné] Část ID monikeru obrázku
Externí [Volitelné, výchozí false] Určuje, jestli moniker obrázku odkazuje na obrázek v aktuálním manifestu.

Moniker pro obsaženou image nemusí odkazovat na obrázek definovaný v aktuálním manifestu. Pokud v knihovně obrázků nenajdete obsažený obrázek, použije se prázdný zástupný obrázek na svém místě.

Použití služby image

První kroky (spravované)

Pokud chcete použít službu image, musíte do projektu přidat odkazy na některá nebo všechna následující sestavení:

  • Microsoft.VisualStudio.ImageCatalog.dll

    • Vyžaduje se, pokud používáte předdefinovaný katalog imagí PoleMonikers.
  • Microsoft.VisualStudio.Imaging.dll

    • Vyžaduje se, pokud v uživatelském rozhraní WPF používáte nástroje CrispImage a ImageThemingUtilities .
  • Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll

    • Vyžaduje se, pokud používáte typy ImageMoniker a ImageAttributes .

    • Hodnoty EmbedInteropTypes by měly být nastaveny na hodnotu true.

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

    • Vyžaduje se, pokud použijete typ IVsImageService2 .

    • Hodnoty EmbedInteropTypes by měly být nastaveny na hodnotu true.

  • Microsoft.VisualStudio.Utilities.dll

    • Vyžaduje se, pokud použijete BrushToColorConverter pro ImageThemingUtilities.ImageBackgroundColor v uživatelském rozhraní WPF.
  • Microsoft.VisualStudio.Shell.<VSVersion.0>

    • Vyžaduje se, pokud použijete typ IVsUIObject .
  • Microsoft.VisualStudio.Shell.Interop.10.0.dll

    • Vyžaduje se, pokud použijete pomocné rutiny uživatelského rozhraní související s WinForms.

    • Hodnoty EmbedInteropTypes by měly být nastaveny na true.

První kroky (nativní)

Pokud chcete použít službu image, musíte do projektu zahrnout některé nebo všechny následující hlavičky:

  • PoleImageIds.h

    • Vyžaduje se, pokud používáte integrovaný katalog imagí PoleMonikers, ale nelze použít ImageMoniker typ, například při vrácení hodnot z IVsHierarchy GetGuidProperty nebo GetProperty volání.
  • PoleMonikers.h

    • Vyžaduje se, pokud používáte předdefinovaný katalog imagí PoleMonikers.
  • ImageParameters140.h

    • Vyžaduje se, pokud používáte typy ImageMoniker a ImageAttributes .
  • VSShell140.h

    • Vyžaduje se, pokud použijete typ IVsImageService2 .
  • ImageThemingUtilities.h

    • Vyžaduje se, pokud nemůžete nechat službu image zpracovávat za vás.

    • Tuto hlavičku nepoužívejte, pokud služba image dokáže zpracovat motivy obrázků.

  • VsDpiAwareness.h

    • Vyžaduje se, pokud k získání aktuálního DPI použijete pomocné rutiny pro rozpoznávání DPI.

Návody psát nové uživatelské rozhraní WPF?

  1. Začněte tím, že do projektu přidáte odkazy na sestavení požadované v předchozí části kroků. Nemusíte přidávat všechny, takže přidejte jenom potřebné odkazy. (Poznámka: Pokud používáte nebo máte přístup k Barvy místo štětců pak můžete přeskočit odkaz na nástroje, protože nebudete potřebovat převaděč.)

  2. Vyberte požadovaný obrázek a získejte jeho moniker. Použijte PoleMoniker nebo použijte vlastní, pokud máte vlastní image a monikers.

  3. Přidejte do xaml nástroje CrispImages . (Viz následující příklad.)

  4. Nastavte ImageThemingUtilities.ImageBackgroundColor vlastnost v hierarchii uživatelského rozhraní. (Toto nastavení by mělo být nastaveno v umístění, kde je známá barva pozadí, nikoli nutně na CrispImage.) (Viz následující příklad.)

<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>

Návody aktualizovat existující uživatelské rozhraní WPF?

Aktualizace existujícího uživatelského rozhraní WPF je relativně jednoduchý proces, který se skládá ze tří základních kroků:

  1. Nahraďte všechny <prvky obrázku> v uživatelském <rozhraní prvky CrispImage> .

  2. Změňte všechny atributy Zdroje na atributy Moniker.

    • Pokud se obrázek nikdy nezmění a používáte PoleMonikers, pak staticky vytvořte vazbu této vlastnosti na PoleMoniker. (Viz výše uvedený příklad.)

    • Pokud se image nikdy nezmění a používáte vlastní image, staticky vytvořte vazbu na vlastní moniker.

    • Pokud se obrázek může změnit, vytvořte vazbu atributu Moniker na vlastnost kódu, která upozorní na změny vlastností.

  3. Někde v hierarchii uživatelského rozhraní nastavte ImageThemingUtilities.ImageBackgroundColor , abyste měli jistotu, že inverze barev funguje správně.

    • To může vyžadovat použití BrushToColorConverter třídy. (Viz výše uvedený příklad.)

Návody aktualizovat uživatelské rozhraní Win32?

Do kódu přidejte následující kód, ať je to vhodné, pokud chcete nahradit nezpracované načítání obrázků. Podle potřeby přepněte hodnoty pro vrácení HBITMAPs oproti HICON a HIMAGELIST.

Získání služby image

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

Vyžádání obrázku

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

Návody aktualizovat uživatelské rozhraní WinForms?

Do kódu přidejte následující kód, ať je to vhodné, pokud chcete nahradit nezpracované načítání obrázků. Podle potřeby přepněte hodnoty pro vrácení rastrových obrázků a ikon.

Užitečný příkaz using

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

Získání služby image

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

Žádost o image

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

Návody použít monikery obrázků v novém okně nástroje?

Šablona projektu balíčku VSIX byla aktualizována pro Visual Studio 2015. Pokud chcete vytvořit nové okno nástroje, klikněte pravým tlačítkem myši na projekt VSIX a vyberte Přidat>novou položku (Ctrl+Shift+A). V uzlu Rozšiřitelnost pro jazyk projektu vyberte Vlastní okno nástrojů, pojmenujte okno nástroje a stiskněte tlačítko Přidat .

Toto jsou klíčová místa pro použití monikers v okně nástroje. Postupujte podle pokynů pro každý z nich:

  1. Karta okna nástroje, když jsou karty dostatečně malé (používá se také v přepínači okna Ctrl+Tab).

    Přidejte tento řádek do konstruktoru pro třídu, která je odvozena od ToolWindowPane typu:

    // Replace this KnownMoniker with your desired ImageMoniker
    this.BitmapImageMoniker = KnownMonikers.Blank;
    
  2. Příkaz k otevření okna nástroje.

    .vsct V souboru balíčku upravte příkazové tlačítko okna nástroje:

    <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>
    

    Za elementy se ujistěte, <Extern> že v horní části souboru existuje také následující:

    <Include href="KnownImageIds.vsct"/>
    

Návody použít monikery obrázků v existujícím okně nástroje?

Aktualizace existujícího okna nástroje tak, aby používala monikery obrázků, se podobá krokům pro vytvoření nového okna nástroje.

Toto jsou klíčová místa pro použití monikers v okně nástroje. Postupujte podle pokynů pro každý z nich:

  1. Karta okna nástroje, když jsou karty dostatečně malé (používá se také v přepínači okna Ctrl+Tab).

    1. Odeberte tyto řádky (pokud existují) v konstruktoru pro třídu, která je odvozena od ToolWindowPane typu:

      this.BitmapResourceID = <Value>;
      this.BitmapIndex = <Value>;
      
    2. Viz krok 1 části "Návody použití monikers obrázku v novém okně nástroje?" výše.

  2. Příkaz k otevření okna nástroje.

    • Podívejte se na krok 2 části "Návody použití monikers obrázků v novém okně nástroje?" výše.

Návody použít obrázky monikers v souboru .vsct?

Aktualizujte .vsct soubor podle níže uvedených komentářových řádků:

<?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>

Co když můj soubor .vsct musí být také čtený staršími verzemi sady Visual Studio?

Starší verze sady Visual Studio nerozpozná příznak příkazu IconIsMoniker . Image ze služby imagí můžete použít ve verzích sady Visual Studio, které ji podporují, ale ve starších verzích sady Visual Studio nadále používat starší obrázky. Uděláte to tak, že soubor ponecháte .vsct beze změny (a proto kompatibilní se staršími verzemi sady Visual Studio) a vytvoříte soubor CSV (hodnoty oddělené čárkami), který se mapuje z párů GUID/ID definovaných v .vsct elementu Bitmaps> souboru <na dvojice identifikátorů GUID/ID obrázku.

Formát souboru CSV mapování je následující:

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

Soubor CSV je nasazen s balíčkem a jeho umístění je určeno IconMappingFilename vlastnost ProvideMenuResource package atribut:

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

IconMappingFilename je buď relativní cesta implicitně rootovaná na $PackageFolder$ (jako v příkladu výše), nebo absolutní cesta explicitně rootovaná v adresáři definovaném proměnnou prostředí, například @"%UserProfile%\dir1\dir2\MyMappingFile.csv".

Návody portovat systém projektu?

Jak poskytnout ImageMonikers pro projekt

  1. Implementujte VSHPROPID_SupportsIconMonikers na IVsHierarchy projektu a vraťte hodnotu true.

  2. Implementujte VSHPROPID_IconMonikerImageList (pokud původní projekt používal VSHPROPID_IconImgList) nebo VSHPROPID_IconMonikerGuid, VSHPROPID_IconMonikerId, VSHPROPID_OpenFolderIconMonikerGuid, VSHPROPID_OpenFolderIconMonikerId (pokud původní projekt používal VSHPROPID_IconHandle a VSHPROPID_OpenFolderIconHandle).

  3. Změňte implementaci původních identifikátorů VSHPROPIDs pro ikony a vytvořte starší verze ikon, pokud je body rozšíření požadují. IVsImageService2 poskytuje funkce potřebné k získání těchto ikon.

    Další požadavky na varianty projektů VB/C#

    Implementujte VSHPROPID_SupportsIconMonikers pouze v případě, že zjistíte, že projekt je nejkrajnější. Jinak skutečná vnější příchuť nemusí podporovat obrázky monikery ve skutečnosti a vaše základní příchuť může efektivně "skrýt" přizpůsobené obrázky.

    Návody použít v CPS obrázky monikers?

    Nastavení vlastních imagí v systému CPS (Common Project System) lze provést ručně nebo pomocí šablony položky, která je součástí sady SDK rozšiřitelnosti systému projektů.

    Použití sady SDK rozšiřitelnosti systému projektu

    Pokud chcete přizpůsobit obrázky CPS, postupujte podle pokynů v části Zadání vlastních ikon pro typ projektu nebo položky. Další informace o cps najdete v dokumentaci k rozšiřitelnosti projectového systému sady Visual Studio.

    Ruční použití ImageMonikers

  4. Implementujte a exportujte rozhraní IProjectTreeModifier v systému projektu.

  5. Určete, který moniker pole PoleMoniker nebo vlastní moniker image chcete použít.

  6. V ApplyModifications metoda proveďte následující kroky někam v metodě před vrácením nového stromu, podobně jako v následujícím příkladu:

    // Replace this KnownMoniker with your desired ImageMoniker
    tree = tree.SetIcon(KnownMonikers.Blank.ToProjectSystemType());
    
  7. Pokud vytváříte nový strom, můžete vlastní image nastavit předáním požadovaných monikers do NewTree metody, podobně jako v následujícím příkladu:

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

Návody převést ze skutečného pruhu obrázku na pruh obrázků založený na monikeru?

Potřebuji podporovat HIMAGELISTs

Pokud už existuje pruh obrázku pro váš kód, který chcete aktualizovat tak, aby používal službu image, ale rozhraní API, která vyžadují předání seznamů obrázků, jsou omezené rozhraními API, které vyžadují předávání seznamů obrázků, můžete stále získat výhody služby image. Pokud chcete vytvořit pruh obrázků založený na monikeru, postupujte podle následujících kroků a vytvořte manifest z existujících monikerů.

  1. Spusťte nástroj ManifestFromResources a předáte ho pruhu obrázku. Tím se vygeneruje manifest pro pruh.

    • Doporučeno: Zadejte jiný než výchozí název manifestu, který bude vyhovovat jeho použití.
  2. Pokud používáte pouze pole KnownMonikers, postupujte takto:

    • <Nahraďte část Obrázky> manifestu obrázky>/<.

    • Odeberte všechna ID subimage (cokoli s <názvem> imagetrip##).

    • Doporučeno: Přejmenujte symbol AssetsGuid a symbol pruhu obrázků tak, aby vyhovoval jeho použití.

    • Nahraďte identifikátor GUID jednotlivých ContainedImage $(ImageCatalogGuid), nahraďte ID každého ContainedImage $(<moniker>) a přidejte do každého atributu ContainedImage atribut External="true".

      • <Moniker> by měl být nahrazen polem PoleMoniker , který odpovídá obrázku, ale s "PoleMonikers" odebrán z názvu.
    • Add <Import Manifest="$(ManifestFolder)\<Relative install dir path to *>\Microsoft.VisualStudio.ImageCatalog.imagemanifest" /*> to the top of the <Symbols> section.

      • Relativní cesta je určena umístěním nasazení definovaným v nastavení pro vytváření manifestu.
  3. Spuštěním nástroje ManifestToCode vygenerujte obálky tak, aby existující kód měl moniker, který může použít k dotazování služby image pro pruh image.

    • Doporučeno: Zadejte nedefaultní názvy obálky a obory názvů tak, aby vyhovovaly jejich použití.
  4. Proveďte všechny doplňky, nastavte vytváření a nasazení a další změny kódu, aby fungovaly se službou image a novými soubory.

    Ukázkový manifest, včetně interních i externích i interních i externích imagí, abyste viděli, jak by měl vypadat:

<?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>

Nemusím podporovat HIMAGELISTs

  1. Určete sadu známýchmonikerů, které odpovídají obrázkům v pruhu obrázku, nebo vytvořte vlastní monikery pro obrázky v pruhu obrázku.

  2. Aktualizujte mapování, které jste použili k získání obrázku v požadovaném indexu v pruhu obrázku, aby se místo toho používaly monikery.

  3. Aktualizujte kód tak, aby používal službu image k vyžádání monikerů prostřednictvím aktualizovaného mapování. (To může znamenat aktualizaci na CrispImages pro spravovaný kód nebo vyžádání HBITMAPs nebo HICON ze služby imagí a jejich předávání pro nativní kód.)

Testování imagí

Pomocí nástroje Prohlížeč knihovny obrázků můžete otestovat manifesty obrázků, abyste měli jistotu, že vše je správně vytvořené. Nástroj najdete v sadě Visual Studio 2015 SDK. Dokumentaci k tomuto nástroji a dalším najdete tady.

Další materiály

Ukázky

Několik ukázek sady Visual Studio na GitHubu bylo aktualizováno, aby ukázalo, jak používat službu image jako součást různých bodů rozšiřitelnosti sady Visual Studio.

Zkontrolujte http://github.com/Microsoft/VSSDK-Extensibility-Samples nejnovější ukázky.

Nástroje

Byla vytvořena sada nástrojů podpory pro službu Image Service, která pomáhá při vytváření nebo aktualizaci uživatelského rozhraní, které funguje se službou Image Service. Další informace o jednotlivých nástrojích najdete v dokumentaci, která obsahuje nástroje. Nástroje jsou součástí sady Visual Studio 2015 SDK.

ManifestFromResources

Nástroj Manifest z prostředků vezme seznam prostředků image (PNG nebo XAML) a vygeneruje soubor manifestu obrázku pro použití těchto imagí se službou image.

ManifestToCode

Nástroj Manifest to Code vezme soubor manifestu obrázku a vygeneruje soubor obálky pro odkazování na hodnoty manifestu v kódu (C++, C# nebo VB) nebo .vsct souborech.

ImageLibraryViewer

Nástroj Prohlížeč knihovny obrázků může načíst manifesty obrázků a umožňuje uživateli manipulovat s nimi stejným způsobem, jakým by Visual Studio zajistilo, že je manifest správně vytvořený. Uživatel může změnit pozadí, velikosti, nastavení DPI, vysoký kontrast a další nastavení. Zobrazuje také informace o načítání, které v manifestech vyhledá chyby a zobrazí zdrojové informace pro každý obrázek v manifestu.

Často kladené dotazy

  • Existují všechny závislosti, které musíte zahrnout při načítání <reference Include="Microsoft.VisualStudio.*. Interop.14.0.DesignTime" />?

    • Nastavte EmbedInteropTypes="true" u všech knihoven DLL zprostředkovatele komunikace.
  • Návody nasadit manifest image s mým rozšířením?

    • .imagemanifest Přidejte soubor do projektu.

    • Nastavte možnost Zahrnout do VSIX na hodnotu True.

  • Moje obrázky stále nefungují, jak zjistím, co je špatně?

    • Visual Studio nemusí najít manifest obrázku. Z důvodů výkonu Sada Visual Studio omezuje hloubku hledání ve složkách, proto doporučujeme, aby se manifest obrázku uchovával v kořenové složce vašeho rozšíření.

    • V souboru manifestu obrázku možná chybí informace o sestavení. Sestavení, která jsou silně pojmenovaná, vyžadují další informace, aby bylo možné načíst visual Studio. Pokud chcete načíst sestavení se silným názvem, musíte do identifikátorů URI prostředků pro image v manifestu image zahrnout (kromě názvu sestavení) verzi sestavení a token veřejného klíče.

      <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>
      
    • Pravděpodobně chybí položka základu kódu pro sestavení image. Pokud sestavení ještě není načteno v době, kdy ji Sada Visual Studio potřebuje, bude muset vědět, kde najít sestavení, aby bylo možné jej načíst. Chcete-li přidat základ kódu pro vaše sestavení, můžete použít ProvideCodeBaseAttribute k zajištění vygenerování a zahrnutí položky základu kódu do souboru pkgdef vašeho rozšíření.

      [assembly: ProvideCodeBase(AssemblyName = "ClassLibrary1", Version = "1.0.0.0", CodeBase = "$PackageFolder$\\ClassLibrary1.dll")]
      
    • Pokud předchozí možnosti problém s načtením image nevyřeší, můžete protokolování povolit přetažením následujících položek do souboru pkgdef ve vašem rozšíření:

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

      Tím se ve složce %UserProfile% vytvoří soubor protokolu s názvem ImageLibrary.log. Po přidání těchto položek do pkgdef nezapomeňte spustit příkaz "devenv /updateConfiguration" z příkazového řádku vývojáře. Tím se zajistí, že jsou povolené položky protokolování a že služba VS aktualizuje mezipaměť manifestu image, aby pomohla najít případné chyby, ke kterým může dojít při čtení manifestu image. Pokud pak projdete scénářem, ve kterém se očekává načtení image, soubor protokolu bude obsahovat protokolování registrace i protokolování požadavků pro vaši image.

  • Aktualizujem systém projektu CPS. Co se stalo s ImageName a StockIconService?

    • Ty byly odebrány při aktualizaci CPS tak, aby používaly monikers. Už nemusíte volat StockIconService, stačí předat požadované PoleMoniker metodě nebo vlastnosti pomocí toProjectSystemType() rozšiřující metoda v CPS nástroje. Mapování z ImageName na PoleMonikers najdete níže:

      ImageName PoleMoniker
      ImageName.OfflineWebApp PoleImageIds.Web
      ImageName.WebReferencesFolder PoleImageIds.Web
      ImageName.OpenReferenceFolder KnownImageIds.FolderOpened
      ImageName.ReferenceFolder PoleImageIds.Reference
      ImageName.Reference PoleImageIds.Reference
      ImageName.SdlWebReference KnownImageIds.WebReferenceFolder
      ImageName.DiscoWebReference PoleImageIds.DynamicDiscoveryDocument
      ImageName.Folder KnownImageIds.FolderClosed
      ImageName.OpenFolder KnownImageIds.FolderOpened
      ImageName.ExcludedFolder PoleImageIds.HiddenFolderClosed
      ImageName.OpenExcludedFolder KnownImageIds.HiddenFolderOpened
      ImageName.ExcludedFile KnownImageIds.HiddenFile
      ImageName.DependentFile PoleImageIds.GenerateFile
      ImageName.MissingFile KnownImageIds.DocumentWarning
      ImageName.WindowsForm PoleImageIds.WindowsForm
      ImageName.WindowsUserControl PoleImageIds.UserControl
      ImageName.WindowsComponent KnownImageIds.ComponentFile
      ImageName.XmlSchema KnownImageIds.XMLSchema
      ImageName.XmlFile PoleImageIds.XMLFile
      ImageName.WebForm PoleImageIds.Web
      ImageName.WebService PoleImageIds.WebService
      ImageName.WebUserControl PoleImageIds.WebUserControl
      ImageName.WebCustomUserControl PoleImageIds.WebCustomControl
      ImageName.AspPage PoleImageIds.ASPFile
      ImageName.GlobalApplicationClass KnownImageIds.SettingsFile
      ImageName.WebConfig KnownImageIds.ConfigurationFile
      ImageName.HtmlPage PoleImageIds.HTMLFile
      ImageName.StyleSheet PoleImageIds.StyleSheet
      ImageName.ScriptFile KnownImageIds.JSScript
      ImageName.TextFile PoleImageIds.Document
      ImageName.SettingsFile KnownImageIds.Settings
      ImageName.Resources PoleImageIds.DocumentGroup
      ImageName.Bitmap KnownImageIds.Image
      ImageName.Icon KnownImageIds.IconFile
      ImageName.Image KnownImageIds.Image
      ImageName.ImageMap KnownImageIds.ImageMapFile
      ImageName.XWorld PoleImageIds.XWorldFile
      ImageName.Audio KnownImageIds.Sound
      ImageName.Video PoleImageIds.Media
      ImageName.Cab KnownImageIds.CABProject
      ImageName.Jar PoleImageIds.JARFile
      ImageName.DataEnvironment PoleImageIds.DataTable
      ImageName.PreviewFile KnownImageIds.Report
      ImageName.DanglingReference KnownImageIds.ReferenceWarning
      ImageName.XsltFile PoleImageIds.XSLTransform
      ImageName.Cursor PoleImageIds.CursorFile
      ImageName.AppDesignerFolder KnownImageIds.Property
      ImageName.Data KnownImageIds.Database
      ImageName.Application PoleImageIds.Application
      ImageName.DataSet PoleImageIds.DatabaseGroup
      ImageName.Pfx KnownImageIds.Certificate
      ImageName.Snk PoleImageIds.Rule
      ImageName.VisualBasicProject PoleImageIds.VBProjectNode
      ImageName.CSharpProject PoleImageIds.CSProjectNode
      ImageName.Empty PoleImageIds.Blank
      ImageName.MissingFolder PoleImageIds.FolderOffline
      ImageName.SharedImportReference PoleImageIds.SharedProject
      ImageName.SharedProjectCs PoleImageIds.CSSharedProject
      ImageName.SharedProjectVc PoleImageIds.CPPSharedProject
      ImageName.SharedProjectJs KnownImageIds.JSSharedProject
      ImageName.CSharpCodeFile PoleImageIds.CSFileNode
      ImageName.VisualBasicCodeFile PoleImageIds.VBFileNode
  • Aktualizujem poskytovatele seznamu dokončení. Jaké hodnoty PoleMonikers odpovídají starým hodnotám StandardGlyphGroup a StandardGlyph ?

    Název Název Název
    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 DelegátIShortcut
    GlyphGroupEnum GlyphItemPublic VýčetPublic
    GlyphGroupEnum GlyphItemInternal VýčetInternal
    GlyphGroupEnum GlyphItemFriend VýčetInternal
    GlyphGroupEnum GlyphItemProtected VýčetProtected
    GlyphGroupEnum GlyphItemPrivate VýčetPrivate
    GlyphGroupEnum GlyphItemShortcut VýčetShortcut
    GlyphGroupEnumMember GlyphItemPublic VýčetItemPublic
    GlyphGroupEnumMember GlyphItemInternal VýčetItemInternal
    GlyphGroupEnumMember GlyphItemFriend VýčetItemInternal
    GlyphGroupEnumMember GlyphItemProtected VýčetItemProtected
    GlyphGroupEnumMember GlyphItemPrivate VýčetItemPrivate
    GlyphGroupEnumMember GlyphItemShortcut VýčetItemShortcut
    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 PoleShortcut
    GlyphGroupInterface GlyphItemPublic InterfacePublic
    GlyphGroupInterface GlyphItemInternal InterfaceInternal
    GlyphGroupInterface GlyphItemFriend InterfaceInternal
    GlyphGroupInterface GlyphItemProtected InterfaceProtected
    GlyphGroupInterface GlyphItemPrivate InterfacePrivate
    GlyphGroupInterface GlyphItemShortcut InterfaceShortcut
    GlyphGroupMacro GlyphItemPublic MakroPublic
    GlyphGroupMacro GlyphItemInternal MacroInternal
    GlyphGroupMacro GlyphItemFriend MacroInternal
    GlyphGroupMacro GlyphItemProtected MakroProtected
    GlyphGroupMacro GlyphItemPrivate MakroPrivate
    GlyphGroupMacro GlyphItemShortcut MakroShortcut
    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 Obor názvůProtected
    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 StrukturaShortcut
    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 PoleShortcut
    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 PoleShortcut
    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 Obor názvůProtected
    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 Chyba stavu
    GlyphBscFile ClassFile
    GlyphAssembly Reference
    GlyfLibrary Knihovna
    GlyphVBProject VBProjectNode
    GlyphCoolProject CSProjectNode
    GlyphCppProject CPPProjectNode
    GlyphDialogId Dialog
    GlyphOpenFolder FolderOpened
    GlyphClosedFolder FolderClosed
    GlyphArrow GoToNext
    GlyphCSharpFile CSFileNode
    GlyphCSharpExpansion Fragment kódu
    GlyphKeyword IntellisenseKeyword
    GlyphInformation Informace o stavu
    GlyphReference TřídaMethodReference
    GlyphRecursion Rekurze
    GlyphXmlItem Značka
    GlyphJSharpProject DocumentCollection
    GlyphJSharpDocument Dokument
    GlyphForwardType GoToNext
    GlyphCallersGraph CallTo
    GlyphCallGraph CallFrom
    GlyphWarning StatusWarning
    GlyphMaybeReference Otazník
    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