C++代码比较:控制台颜色设置等价性分析
{"title":"C++代码比较:控制台颜色设置等价性分析","description":"本文分析了两段C++代码,它们都实现控制台文本和背景颜色设置。我们比较它们的功能和实现方式,判断是否等价。","keywords":"C++, 控制台颜色, 代码比较, 等价性, Windows, Linux, ANSI转义序列, GetStdHandle, SetConsoleTextAttribute, operator overloading","content":"是的,这两段代码在功能上是等价的。它们都实现了在 Windows 和 Linux 系统上设置控制台文本和背景颜色的功能。\n\n代码分析:\n\n1. 平台差异: 这两段代码都使用 #ifdef 预处理器指令来区分 Windows 和 Linux 平台。在 Windows 上,它们使用 Windows API 函数 "GetStdHandle" 和 "SetConsoleTextAttribute" 来设置颜色。在 Linux 上,它们使用 ANSI 转义序列来控制终端颜色。\n\n2. 代码结构: 两段代码都使用枚举类(enum class)来定义文本颜色和背景颜色,并使用 operator overloading 来方便地将颜色枚举值输出到控制台。\n\n3. 颜色设置逻辑: 两段代码的具体实现方式有所不同,但它们最终实现的功能是一样的:\n - Windows 平台:使用 Windows API 函数设置控制台属性。\n - Linux 平台:使用 ANSI 转义序列控制终端颜色。\n\n结论:\n\n这两段代码在功能上是等价的,都能够实现控制台文本和背景颜色的设置。它们在平台差异性方面进行了很好的处理,在不同平台上使用了不同的实现方式。在实际应用中,可以根据需要选择其中一种代码实现。\n\n注意: ANSI 转义序列在不同终端模拟器上的兼容性可能存在差异,建议进行测试验证。\n\n代码示例:\n\ncpp\n#include \"iostream\"\n#include \"string\"\n\n#ifdef OS_TYPE_WINDOWS_CC\n #include \"Windows.h\"\n#endif // OS_TYPE_WINDOWS_CC\n\n// Enum class for console text color\nenum class ConsoleColor\n{\n Green, Red, Blue, White, Black, Yellow, Purple, Gray, Cyan, None,\n GreenIntensity, RedIntensity, BlueIntensity, WhiteIntensity, BlackIntensity, YellowIntensity, PurpleIntensity, GrayIntensity, CyanIntensity\n};\n\n// Enum class for console background color\nenum class ConsoleBackgroundColor\n{\n Green, Red, Blue, White, Black, Yellow, Purple, Gray, Cyan, None,\n GreenIntensity, RedIntensity, BlueIntensity, WhiteIntensity, BlackIntensity, YellowIntensity, PurpleIntensity, GrayIntensity\n};\n\n// Operator overloading for console text color\nstd::wostream& operator<< (std::wostream& os, ConsoleColor data)\n{\n switch (data)\n {\n case ConsoleColor::Green: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_GREEN);\n#else \n std::wcout << L"\033[32m";\n#endif\n }\n break;\n\n \n case ConsoleColor::Black: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, 0);\n#else \n std::wcout << L"\033[30m";\n#endif\n }\n break;\n\n \n case ConsoleColor::Blue: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE);\n#else \n std::wcout << L"\033[34m";\n#endif\n }\n break;\n\n \n case ConsoleColor::Gray: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);\n#else \n std::wcout << L"\033[37m";\n#endif\n }\n break;\n\n \n case ConsoleColor::Purple: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED);\n#else \n std::wcout << L"\033[35m";\n#endif\n }\n break;\n\n \n case ConsoleColor::Red: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_RED);\n#else \n std::wcout << L"\033[31m";\n#endif\n }\n break;\n\n \n case ConsoleColor::White: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);\n#else \n std::wcout << L"\033[37m";\n#endif\n }\n break;\n\n \n case ConsoleColor::Cyan: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN);\n#else \n std::wcout << L"\033[36m";\n#endif\n }\n break;\n\n \n case ConsoleColor::Yellow: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_RED | FOREGROUND_GREEN);\n#else \n std::wcout << L"\033[33m";\n#endif\n }\n break;\n\n \n case ConsoleColor::None: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);\n#else \n std::wcout << L"\033[0m";\n#endif\n }\n break;\n\n \n case ConsoleColor::GreenIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_GREEN | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[32m;1m";\n#endif\n }\n break;\n\n \n case ConsoleColor::BlackIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, 0);\n#else \n std::wcout << L"\033[30m;1m";\n#endif\n }\n break;\n\n \n case ConsoleColor::BlueIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[34m;1m";\n#endif\n }\n break;\n\n \n case ConsoleColor::GrayIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[37m;1m";\n#endif\n }\n break;\n\n \n case ConsoleColor::PurpleIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[35m;1m";\n#endif\n }\n break;\n\n \n case ConsoleColor::RedIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_RED | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[31m;1m";\n#endif\n }\n break;\n\n \n case ConsoleColor::WhiteIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[37m;1m";\n#endif\n }\n break;\n\n \n case ConsoleColor::YellowIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[33m;1m";\n#endif\n }\n break;\n\n \n case ConsoleColor::CyanIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[36m;1m";\n#endif\n }\n break;\n\n\n default:\n break;\n }\n\n return os;\n}\n\nstd::wostream& operator<< (std::wostream& os, ConsoleBackgroundColor data)\n{\n switch (data)\n {\n case ConsoleBackgroundColor::Green: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_GREEN);\n#else \n std::wcout << L"\033[42m";\n#endif\n }\n break;\n\n \n case ConsoleBackgroundColor::Black: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, 0);\n#else \n std::wcout << L"\033[40m";\n#endif\n }\n break;\n\n \n case ConsoleBackgroundColor::Blue: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_BLUE);\n#else \n std::wcout << L"\033[44m";\n#endif\n }\n break;\n\n \n case ConsoleBackgroundColor::Gray: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, 0);\n#else \n std::wcout << L"\033[40m";\n#endif\n }\n break;\n\n \n case ConsoleBackgroundColor::Purple: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_RED | BACKGROUND_BLUE);\n#else \n std::wcout << L"\033[45m";\n#endif\n }\n break;\n\n \n case ConsoleBackgroundColor::Red: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_RED);\n#else \n std::wcout << L"\033[41m";\n#endif\n }\n break;\n\n\n case ConsoleBackgroundColor::White: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN);\n#else \n std::wcout << L"\033[47m";\n#endif\n }\n break;\n\n\n case ConsoleBackgroundColor::Yellow: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_RED | BACKGROUND_GREEN);\n#else \n std::wcout << L"\033[43m";\n#endif\n }\n break;\n\n\n case ConsoleBackgroundColor::Cyan: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_BLUE | BACKGROUND_GREEN);\n#else \n std::wcout << L"\033[46m";\n#endif\n }\n break;\n\n\n case ConsoleBackgroundColor::None: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, 0);\n#else \n std::wcout << L"\033[40m";\n#endif\n }\n break;\n\n\n default:\n break;\n }\n\n return os;\n}\n\n\n\ncpp\n// ColorfulConsole.cpp : 定义控制台应用程序的入口点。\n//\n\n#include \"stdafx.h\"\n#include <iostream>\n#include <string>\n\n\n//#define OS_TYPE_WINDOWS_CC\n//#define OS_TYPE_LINUX_CC\n\n#ifdef OS_TYPE_WINDOWS_CC\n #include <Windows.h>\n#endif // OS_TYPE_WINDOWS_CC\n\n\n\n\nenum class ConsoleColor\n{\n Green, Red, Blue, White, Black,Yellow,Purple,Gray,Cyan,None,\n GreenIntensity, RedIntensity, BlueIntensity, WhiteIntensity, BlackIntensity, YellowIntensity, PurpleIntensity, GrayIntensity,CyanIntensity\n};\n\nenum class ConsoleBackgroundColor\n{\n Green, Red, Blue, White, Black, Yellow, Purple, Gray, Cyan,None,\n GreenIntensity, RedIntensity, BlueIntensity, WhiteIntensity, BlackIntensity, YellowIntensity, PurpleIntensity, GrayIntensity\n};\n\nstd::wostream& operator<< (std::wostream& os, ConsoleColor data)\n{\n switch (data)\n {\n case ConsoleColor::Green: {\n\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_GREEN);\n#else \n std::wcout << L"\033[32m";\n#endif\n\n\n\n }break;\n case ConsoleColor::Black: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, 0);\n#else \n std::wcout << L"\033[30m";\n#endif\n\n }break;\n case ConsoleColor::Blue: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE);\n#else \n std::wcout << L"\033[34m";\n#endif\n\n }break;\n case ConsoleColor::Gray: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);\n#else \n std::wcout << L"\033[37m";\n#endif\n\n }break;\n case ConsoleColor::Purple: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED);\n#else \n std::wcout << L"\033[35m";\n#endif\n\n }break;\n case ConsoleColor::Red: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_RED);\n#else \n std::wcout << L"\033[31m";\n#endif\n\n }break;\n case ConsoleColor::White: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);\n#else \n std::wcout << L"\033[37m";\n#endif\n\n }break;\n case ConsoleColor::Cyan: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN);\n#else \n std::wcout << L"\033[36m";\n#endif\n\n }break;\n case ConsoleColor::Yellow: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_RED | FOREGROUND_GREEN);\n#else \n std::wcout << L"\033[33m";\n#endif\n\n }break;\n case ConsoleColor::None: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);\n#else \n std::wcout << L"\033[0m";\n#endif\n\n }break;\n\n case ConsoleColor::GreenIntensity: {\n\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_GREEN | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[32m;1m";\n#endif\n\n\n\n }break;\n case ConsoleColor::BlackIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, 0);\n#else \n std::wcout << L"\033[30m;1m";\n#endif\n\n }break;\n case ConsoleColor::BlueIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[34m;1m";\n#endif\n\n }break;\n case ConsoleColor::GrayIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[37m;1m";\n#endif\n\n }break;\n case ConsoleColor::PurpleIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[35m;1m";\n#endif\n\n }break;\n case ConsoleColor::RedIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_RED | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[31m;1m";\n#endif\n\n }break;\n case ConsoleColor::WhiteIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[37m;1m";\n#endif\n\n }break;\n case ConsoleColor::YellowIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[33m;1m";\n#endif\n\n }break;\n case ConsoleColor::CyanIntensity: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);\n#else \n std::wcout << L"\033[36m;1m";\n#endif\n\n }break;\n\n default:\n break;\n }\n\n return os;\n}\n\nstd::wostream& operator<< (std::wostream& os, ConsoleBackgroundColor data)\n{\n switch (data)\n {\n case ConsoleBackgroundColor::Green: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_GREEN);\n#else \n std::wcout << L"\033[42m";\n#endif\n\n }break;\n case ConsoleBackgroundColor::Black: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, 0);\n#else \n std::wcout << L"\033[40m";\n#endif\n\n }break;\n case ConsoleBackgroundColor::Blue: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_BLUE);\n#else \n std::wcout << L"\033[44m";\n#endif\n\n }break;\n case ConsoleBackgroundColor::Gray: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, 0);\n#else \n std::wcout << L"\033[40m";\n#endif\n\n }break;\n case ConsoleBackgroundColor::Purple: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_RED | BACKGROUND_BLUE);\n#else \n std::wcout << L"\033[45m";\n#endif\n\n }break;\n case ConsoleBackgroundColor::Red: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_RED);\n#else \n std::wcout << L"\033[41m";\n#endif\n\n }break;\n case ConsoleBackgroundColor::White: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN);\n#else \n std::wcout << L"\033[47m";\n#endif\n\n }break;\n case ConsoleBackgroundColor::Yellow: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_RED | BACKGROUND_GREEN);\n#else \n std::wcout << L"\033[43m";\n#endif\n\n }break;\n case ConsoleBackgroundColor::Cyan: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, BACKGROUND_BLUE | BACKGROUND_GREEN);\n#else \n std::wcout << L"\033[46m";\n#endif\n\n }break;\n case ConsoleBackgroundColor::None: {\n#ifdef OS_TYPE_WINDOWS_CC\n HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);\n SetConsoleTextAttribute(handle, 0);\n#else \n std::wcout << L"\033[40m";\n#endif\n\n }break;\n default:\n break;\n }\n\n return os;\n}\n\n
原文地址: https://www.cveoy.top/t/topic/qd8M 著作权归作者所有。请勿转载和采集!