다음을 통해 공유


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 형식에서는 다음과 같은 멤버를 노출합니다.

메서드

  이름 설명
Public 메서드 GetColorData 지정 된 요소에 대 한 RGB 값을 검색합니다.

위쪽

설명

이 인터페이스를 사용 하 여 비트 또는 높은 색상 값에 대 한 지원을 제공 합니다. 구현 하는 클래스에서 구현 되는 IVsColorableItem 또는 IVsPackageDefinedTextMarkerType 인터페이스입니다.

구현자 참고 사항

경우 높음에 대 한 지원이 필요한 색상 값,이 인터페이스를 구현 하는 클래스에서 구현 해야는 IVsColorableItem 또는 IVsPackageDefinedTextMarkerType 인터페이스.

호출자 참고 사항

이 인터페이스를 구현 하는 개체에서 가져올 수 있는지 여부는 IVsColorableItem 또는 IVsPackageDefinedTextMarkerType 인터페이스, 높은 색상 값에 대 한 광고 지원 개체입니다. 호출 하는 GetColorData 메서드는 RGB 값이 개별 전경, 배경 및 선 색상에 대 한. 경우는 GetColorData 메서드는 오류를 반환 하 고 원래 색깔이 액세스를 정상적으로 다시 속하는 IVsColorableItem 또는 IVsPackageDefinedTextMarkerType 인터페이스입니다.

예제

다음은 관리 되는 코드를 구현 하는 방법의 예는 IVsHiColorItem 인터페이스와 인스턴스화할. 빨간색, 녹색 및 파랑 값으로 변환 됩니다 참고는 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 네임스페이스