適当にググって見ると、色周りは以下のブログが分かりやすかったです。まぁ情報としては先日のと同じなんですが。
この辺のコードとか定数で定義されていると楽なんだけどなぁ、と思ったけどそうもいかないか。
面白みはありませんが、とりあえず書いてみるとこんな感じですか。
#include <iostream> #include <string> #include <Windows.h> constexpr const char* ESC = "\x1b"; constexpr const char* CSI = "\x1b["; bool EnableVTMode() { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); if (hOut == INVALID_HANDLE_VALUE) { return false; } DWORD dwMode = 0; if (!GetConsoleMode(hOut, &dwMode)) { return false; } dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; if (!SetConsoleMode(hOut, dwMode)) { return false; } return true; } int main() { if (!EnableVTMode()) { return -1; } for (auto i = 1; i < 7; ++i) { std::cout << CSI << std::to_string(30 + i) << "m"; // 文字の色を変更 std::cout << "Hello World"; Sleep(500); std::cout << "\r"; // カーソルを先頭に戻す std::cout << CSI << "K"; // 行末まで出力した文字列を削除 } return 0; }
どうでもいいけれどC++とCLIという単語を組み合わせるとCommon Language Infrastructureの方が出てきてしまって具合が悪いですね。