Compartir a través de


IVsHiColorItem (Interfaz)

Proporciona compatibilidad para devolver 24 valores de color completo de bits.

Espacio de nombres:  Microsoft.VisualStudio.TextManager.Interop
Ensamblado:  Microsoft.VisualStudio.TextManager.Interop.8.0 (en Microsoft.VisualStudio.TextManager.Interop.8.0.dll)

Sintaxis

'Declaración
<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

El tipo IVsHiColorItem expone los siguientes miembros.

Métodos

  Nombre Descripción
Método público GetColorData Recupera el valor RGB para el elemento especificado.

Arriba

Comentarios

Esta interfaz se utiliza para proporcionar compatibilidad con 24 bits o de color de gran densidad. se implementa en la misma clase que implementa las interfaces de IVsColorableItem o de IVsPackageDefinedTextMarkerType .

Notas para los implementadores

Si la compatibilidad para los valores de color de gran densidad es necesario, esta interfaz se debe implementar en la misma clase que implementa las interfaces de IVsColorableItem o de IVsPackageDefinedTextMarkerType .

Notas para los llamadores

Si esta interfaz se puede obtener de un objeto que implementa IVsColorableItem o interfaz de IVsPackageDefinedTextMarkerType , ese objeto hace anunciar el soporte para los valores de color de gran densidad. Llame al método de GetColorData para obtener los valores RGB para el primer plano, el fondo, y los colores de línea individuales. Si el método de GetColorData devuelve un error, recurra correctamente a tener acceso los colores de IVsColorableItem o interfaces original de IVsPackageDefinedTextMarkerType .

Ejemplos

A continuación se muestra un ejemplo de código administrado de cómo implementar la interfaz de IVsHiColorItem y instancias de ella. Observe que un conjunto de valores de rojo, verde, azul y se convierte en COLORREF en el constructor de MyRGB . Este ejemplo es de un servicio de lenguaje.

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

Vea también

Referencia

Microsoft.VisualStudio.TextManager.Interop (Espacio de nombres)