IVsHiColorItem - интерфейс
Предоставляет поддержку для возвращения значения цвета полностью 24 бит.
Пространство имен: Microsoft.VisualStudio.TextManager.Interop
Сборка: Microsoft.VisualStudio.TextManager.Interop.8.0 (в Microsoft.VisualStudio.TextManager.Interop.8.0.dll)
Синтаксис
'Декларация
<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
Тип IVsHiColorItem предоставляет следующие члены.
Методы
Имя | Описание | |
---|---|---|
GetColorData | Возвращает RGB-значение для указанного элемента. |
В начало страницы
Заметки
Этот интерфейс используется для обеспечения поддержки 24 бит или значения высокого цвета. Реализован в том же классе, который реализует IVsColorableItem OR IVsPackageDefinedTextMarkerType интерфейсы.
Примечания для разработчиков
Если поддержка значений высокого цвета не требуются, этот интерфейс должен быть реализован в том же классе, который реализует IVsColorableItem OR IVsPackageDefinedTextMarkerType интерфейсы.
Примечания к вызывающим объектам
Если этот интерфейс можно получить из объекта, реализующего IVsColorableItem OR IVsPackageDefinedTextMarkerType интерфейс, затем этот объект объявляется поддержка значений высокого цвета. Вызовите GetColorData метод получения значения rgb для отдельных переднего плана, фона и цвет линии. Если GetColorData метод возвращает ошибку, корректно возвращается к доступа к цвета в оригинале IVsColorableItem OR IVsPackageDefinedTextMarkerType интерфейсы.
Примеры
Ниже приведен пример в управляемом коде, как реализовать IVsHiColorItem интерфейс и создавать его экземпляр. Обратите внимание, что набор (красного, зеленого и синего значений преобразуется к a COLORREF в MyRGB конструктор. В этом примере от языковой службы.
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))
};
}
}
}
См. также
Ссылки
Microsoft.VisualStudio.TextManager.Interop - пространство имен