>백엔드 개발 >C++ >내 C# 콘솔 응용 프로그램에서 사용자 지정 색상(주황색 등)을 표시하려면 어떻게 해야 합니까?

내 C# 콘솔 응용 프로그램에서 사용자 지정 색상(주황색 등)을 표시하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-02 17:25:40610검색

How Can I Display Custom Colors (Like Orange) in My C# Console Application?

콘솔 애플리케이션의 다채로운 텍스트

내장된 ConsoleColor 열거형은 C# 콘솔 애플리케이션에 대해 제한된 텍스트 색상 선택을 제공합니다. 그러나 포함되지 않은 주황색과 같은 특정 색상을 원하는 경우가 있을 수 있습니다.

ConsoleColor 열거형의 제한 사항

ConsoleColor 열거형에는 지원되는 텍스트가 나열되어 있습니다. 색상은 다음과 같습니다.

Black
DarkBlue
DarkGreen
DarkCyan
DarkRed
DarkMagenta
DarkYellow
Gray
DarkGray
Blue
Green
Cyan
Red
Magenta
Yellow
White

보시다시피 이 세트에는 주황색이 없습니다. colors.

P/Invoke를 통한 사용자 정의 텍스트 색상

사용자 정의 텍스트 색상을 얻으려면 플랫폼 호출(P/Invoke) 영역을 자세히 알아볼 수 있습니다. kernel32.dll 라이브러리의 SetConsoleScreenBufferInfoEx() 함수를 활용하면 콘솔의 색상 설정을 직접 조작할 수 있습니다.

먼저 필요한 데이터 구조를 정의합니다.

[StructLayout(LayoutKind.Sequential)]
internal struct COORD
{
    public short X;
    public short Y;
}

[StructLayout(LayoutKind.Sequential)]
internal struct SMALL_RECT
{
    public short Left;
    public short Top;
    public short Right;
    public short Bottom;
}

[StructLayout(LayoutKind.Sequential)]
internal struct COLORREF
{
    public uint ColorDWORD;
    
    public COLORREF(Color color)
    {
        ColorDWORD = (uint) color.R + (((uint) color.G) << 8) + (((uint) color.B) << 16);
    }
}

[StructLayout(LayoutKind.Sequential)]
internal struct CONSOLE_SCREEN_BUFFER_INFO_EX
{
    public int cbSize;
    public COORD dwSize;
    public COORD dwCursorPosition;
    public ushort wAttributes;
    public SMALL_RECT srWindow;
    public COORD dwMaximumWindowSize;
    public ushort wPopupAttributes;
    public bool bFullscreenSupported;
    ...
}

그런 다음 kernel32.dll의 필수 기능:

[DllImport("kernel32.dll", SetLastError = true)]
private static extern IntPtr GetStdHandle(int nStdHandle);

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool GetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref CONSOLE_SCREEN_BUFFER_INFO_EX csbe);

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref CONSOLE_SCREEN_BUFFER_INFO_EX csbe);

사용자 정의 설정 색상

이제 이러한 도구를 사용하여 주황색을 포함한 특정 콘솔 색상을 설정하는 메서드를 정의할 수 있습니다.

public static int SetColor(ConsoleColor consoleColor, Color targetColor)
{
    // Fetch console details
    CONSOLE_SCREEN_BUFFER_INFO_EX csbe = new CONSOLE_SCREEN_BUFFER_INFO_EX();
    csbe.cbSize = (int)Marshal.SizeOf(csbe);
    IntPtr hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    bool brc = GetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe);
    if (!brc)
        return Marshal.GetLastWin32Error();

    // Set the specified color component
    switch (consoleColor)
    {
        case ConsoleColor.Black:
            csbe.black = new COLORREF(targetColor);
            break;
        ...
        // Other colors defined similarly
    }
    
    // Apply the Color
    brc = SetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe);
    if (!brc)
        return Marshal.GetLastWin32Error();
    
    return 0;
}

public static int SetScreenColors(Color foregroundColor, Color backgroundColor)
{
    int irc = SetColor(ConsoleColor.Gray, foregroundColor);
    if (irc != 0) return irc;
    irc = SetColor(ConsoleColor.Black, backgroundColor);
    return irc;
}

이제 SetScreenColors의 실제 작동 예를 살펴보겠습니다.

static void Main(string[] args)
{
    Color screenTextColor = Color.Orange;
    Color screenBackgroundColor = Color.Black;
    SetScreenColors(screenTextColor, screenBackgroundColor);
    
    Console.WriteLine("Hello World!");
    Console.ReadKey();
}

위 방법을 사용하면 콘솔의 전경색과 배경색을 주황색을 포함하여 원하는 RGB 값으로 설정할 수 있습니다. 콘솔 출력을 사용자 정의해 보세요!

위 내용은 내 C# 콘솔 응용 프로그램에서 사용자 지정 색상(주황색 등)을 표시하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.