IVsHiColorItem-Schnittstelle
Bietet Unterstützung für das Zurückgeben eines vollständigen 24-Bit-Farbwerts.
Namespace: Microsoft.VisualStudio.TextManager.Interop
Assembly: Microsoft.VisualStudio.TextManager.Interop.8.0 (in Microsoft.VisualStudio.TextManager.Interop.8.0.dll)
Syntax
'Declaration
<InterfaceTypeAttribute()> _
<GuidAttribute("16C240B3-4773-43C2-932A-1E8DD2F6F0F8")> _
Public Interface IVsHiColorItem
[InterfaceTypeAttribute()]
[GuidAttribute("16C240B3-4773-43C2-932A-1E8DD2F6F0F8")]
public interface IVsHiColorItem
[InterfaceTypeAttribute()]
[GuidAttribute(L"16C240B3-4773-43C2-932A-1E8DD2F6F0F8")]
public interface class IVsHiColorItem
[<InterfaceTypeAttribute()>]
[<GuidAttribute("16C240B3-4773-43C2-932A-1E8DD2F6F0F8")>]
type IVsHiColorItem = interface end
public interface IVsHiColorItem
Der IVsHiColorItem-Typ macht die folgenden Member verfügbar.
Methoden
Name | Beschreibung | |
---|---|---|
GetColorData | Ruft den RGB-Wert für das angegebene Element ab. |
Zum Seitenanfang
Hinweise
Diese Schnittstelle wird verwendet, um Unterstützung für 24-Bit oder hohe Farbwerte zu unterstützen. Sie wird auf derselben Klasse implementiert, die die IVsColorableItem oder IVsPackageDefinedTextMarkerType-Schnittstellen implementiert.
Hinweise zur Implementierung
Wenn Unterstützung für hohe Farbwerte erforderlich ist, muss diese Schnittstelle in derselben Klasse implementiert werden, die die IVsColorableItem oder IVsPackageDefinedTextMarkerType-Schnittstellen implementiert.
Hinweise zu Aufrufern
Wenn diese Schnittstelle von einem Objekt abgerufen werden kann, das IVsColorableItem oder IVsPackageDefinedTextMarkerType-Schnittstelle implementiert, ist dieses Objekt Werbeträger für hohe Farbwerte. Rufen Sie die GetColorData-Methode auf, um die RGB-Werte für einzelne Vordergrund, die Hintergrund- und die Linienfarben abzurufen. Wenn die GetColorData-Methode einen Fehler zurückgibt, schlagen Sie problemlos wieder zum Zugreifen auf die Farben auf den ursprünglichen IVsColorableItem oder IVsPackageDefinedTextMarkerType-Schnittstellen.
Beispiele
Im Folgenden ein Beispiel in verwaltetem Code aus, wie die IVsHiColorItem-Schnittstelle implementiert und instanziiert. Beachten Sie, wie ein Satz von Rot, Grün und Blau Werte zu COLORREF im MyRGB-Konstruktor konvertiert wird. Dieses Beispiel ist ein Sprachdienst.
using Microsoft.VisualStudio.TextManager.Interop;
namespace MyNamespace
{
internal struct MyRGB
{
public uint ColorRef;
public MyRGB(int r, int g, int b)
{
ColorRef = (uint)System.Drawing.ColorTranslator.ToWin32(
System.Drawing.Color.FromArgb(r, g, b));
}
public MyRGB(bool fInvalid)
{
ColorRef = unchecked((uint)-1);
}
public bool IsValid()
{
return ColorRef != unchecked((uint)-1);
}
}
internal class MyColorItem : IVsColorableItem, IVsHiColorItem
{
// Indicates that the returned RGB value is really an index
// into a predefined list of colors.
private const uint COLOR_INDEXED = 0x01000000;
//==========================================================
// Private fields.
private COLORINDEX foreColor;
private COLORINDEX backColor;
private FONTFLAGS fontFlags;
private MyRGB foreRGB;
private MyRGB backRGB;
private string name;
private string displayName;
//==========================================================
// Public constructors.
public MyColorItem(string name,
string displayName,
COLORINDEX foreColor,
COLORINDEX backColor,
FONTFLAGS fontFlags)
{
this.name = name;
this.displayName = displayName;
this.foreColor = foreColor;
this.backColor = backColor;
this.fontFlags = fontFlags;
this.foreRGB = new MyRGB(false);
this.backRGB = new MyRGB(false);
}
public MyColorItem(string name,
string displayName,
COLORINDEX foreColor,
COLORINDEX backColor,
FONTFLAGS fontFlags,
MyRGB foreRGB,
MyRGB backRGB)
{
this.name = name;
this.displayName = displayName;
this.foreColor = foreColor;
this.backColor = backColor;
this.fontFlags = fontFlags;
this.foreRGB = foreRGB;
this.backRGB = backRGB;
}
//==========================================================
// IVsColorableItem methods.
#region IVsColorableItem Members
int IVsColorableItem.GetDefaultColors(COLORINDEX[] piForeground,
COLORINDEX[] piBackground)
{
int retval = VSConstants.E_POINTER;
if (piForeground != null)
{
piForeground[0] = this.foreColor;
retval = VSConstants.S_OK;
}
if (piBackground != null)
{
piBackground[0] = this.backColor;
}
return retval;
}
int IVsColorableItem.GetDefaultFontFlags(out uint pdwFontFlags)
{
pdwFontFlags = (uint)this.fontFlags;
return VSConstants.S_OK;
}
int IVsColorableItem.GetDisplayName(out string pbstrName)
{
pbstrName = this.displayName;
return VSConstants.S_OK;
}
#endregion
//==========================================================
// IVsHiColorItem methods.
#region IVsHiColorItem Members
int IVsHiColorItem.GetColorData(int cdElement, out uint pcrColor)
{
int retval = VSConstants.E_NOTIMPL;
pcrColor = 0;
switch ((__tagVSCOLORDATA)cdElement)
{
case __tagVSCOLORDATA.CD_BACKGROUND:
pcrColor = this.backRGB.IsValid() ?
this.backRGB.ColorRef :
(uint)backColor | COLOR_INDEXED;
retval = VSConstants.S_OK;
break;
case __tagVSCOLORDATA.CD_FOREGROUND:
case __tagVSCOLORDATA.CD_LINECOLOR:
pcrColor = this.foreRGB.IsValid() ?
this.foreRGB.ColorRef :
(uint)foreColor | COLOR_INDEXED;
retval = VSConstants.S_OK;
break;
default:
retval = VSConstants.E_INVALIDARG;
break;
}
return retval;
}
#endregion
}
//==============================================================
// Example of how to instantiate the MyColorItem class.
public class MyLanguageService
{
private ColorableItem[] colorableItemsList;
public MyLanguageService()
{
colorableItemsList = {
new MyColorableItem("MyLanguage- Text",
"MyLanguage- Text",
COLORINDEX.CI_SYSPLAINTEXT_FG,
COLORINDEX.CI_SYSPLAINTEXT_BK,
FONTFLAGS.FF_BOLD),
new MyColorableItem("MyLanguage- Keyword",
"MyLanguage- Keyword",
COLORINDEX.CI_MAROON,
COLORINDEX.CI_SYSPLAINTEXT_BK,
FONTFLAGS.FF_BOLD,
new MyRGB(192,64,0),
new MyRGB(false)),
new MyColorableItem("MyLanguage- Operator",
"MyLanguage- Operator",
COLORINDEX.CI_DARKBLUE,
COLORINDEX.CI_BLUE,
FONTFLAGS.FF_PLAIN,
new MyRGB(0,64,192),
new MyRGB(128,128,255))
};
}
}
}