콘솔 애플리케이션의 다채로운 텍스트
내장된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!