【问题标题】:How do I set the whole rows background color in a C++ console app如何在 C++ 控制台应用程序中设置整行背景颜色
【发布时间】:2021-06-08 12:58:15
【问题描述】:

我该如何做主题行中提到的事情?

下面是我的控制台应用程序的屏幕截图以及一些代码。

switch (indicator) {
    case GreenFlag:
        indicator = GreenFlag;
        system("CLS");
        SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), BACKGROUND_GREEN);
        cout << "IF YOUR CAR ISN'T LEAKING OIL AND YOU DON'T MAKE A NOISE YOU'RE WELCOME TO PARK HERE!" << endl << endl;
        break;
        ...
    default:
        system("CLS");
        SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);
        cout << "INCORRECT OPTION, PLEASE TRY AGAIN!" << endl << endl;
        break;
}
SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), 7);

【问题讨论】:

  • 写空格有用吗?然后你只需要弄清楚宽度
  • @Jeffrey 可能可行,但老实说,这更像是一种黑客行为,而不是一个可行的解决方案。
  • OT,但你刚刚描述了整个 winapi ;-)
  • 控制台是基于字符的。它没有行和列的概念。如果您的程序需要那种更高级别的信息,您将不得不改用Console API(如FillConsoleOutputAttribute)。完全不是面向未来的,但你有它。 @jef 让我们玩个游戏:命名一个几十年来一直与 ABI 兼容的 API。如果你找到一个不是 Windows API 的,你就赢了。
  • “完全不是面向未来的” 使用 Window API 意味着您将不得不担心您的应用程序在大约半个世纪后会失败。选择加入the future 没有错。我的评论只是为了说明,“历史保存”一些(一个)公司意味着什么。无论如何,如果您拨打system("CLS") 电话,您已经在借用时间了。

标签: c++ winapi console-application codeblocks


【解决方案1】:

所以这就是我最终想出的!

我认为它相当可靠,但仍需要大量工作。

@IInspectable 我仍在研究清除屏幕的最佳方法,以防万一。

string message = "";
// Indicator mood;
// mood = (Indicator)Random.Range(0, System.Enum.GetValues(typeof(Indicator)).Length);)

switch (indicator) {
    case GreenFlag:
        indicator = GreenFlag;
        // TODO: Need to replace system("CLS") with a more portable option, take a look at the following link(s):
        // https://www.cplusplus.com/articles/4z18T05o/ and https://www.cplusplus.com/forum/beginner/3304/ for more information!
        system("CLS");
        SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), BACKGROUND_GREEN);
        message = "IF YOUR CAR ISN'T LEAKING OIL AND YOU DON'T MAKE A NOISE YOU'RE WELCOME TO PARK HERE!";
        cout << message.append(120 - message.length(), ' ') << endl << endl;
        break;
...
default:
        system("CLS");
        SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);
        message = "INCORRECT OPTION, PLEASE TRY AGAIN!";
        cout << message.append(120 - message.length(), ' ') << endl << endl;
        break;
}

再次感谢@Jeffrey 和@IInspectable 提出的想法,感谢中肯的建议;-)。

【讨论】:

    猜你喜欢
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2017-11-18
    • 2011-11-23
    • 2012-01-07
    相关资源
    最近更新 更多