C++ : Using background colors with clrscr()

标签 c++ windows console

我目前正在制作一个简单的游戏。初始屏幕是欢迎屏幕,颜色如下:

system("color f3")//background:white , text:aqua

然后当我从我的 main() 函数中调用以下内容时

void display()
{

    Sleep(2000);
    clrscr();
    system("color f3");
    cout<<"Levels:\n\n";
    int d;
    cout<<"1.Easy\n";
    cout<<"2.Medium\n";
    cout<<"3.Hard\n";
    cout<<"4.Insane!\n";
    cout<<"Choose your difficulty:";
    cin>>d;
}

在我的 display() 中没有语句 system("color f3"); 背景是黑色的,文本以白色突出显示,文本颜色是浅绿色.

enter image description here

我想知道为什么会出现上述情况。

问题:

使用语句 system("color f3");clrscr() 被调用时,屏幕变黑几毫秒然后变白,水色。

那么如何防止屏幕变黑那几毫秒呢?

感谢您的帮助:)

最佳答案

当您调用 system() 时,您在另一个进程中启动命令处理器,这会更改屏幕设置。

当您稍后调用 clrscr() 时,您的库清除会使用它在启动时存储的自己的颜色来清除屏幕。这就是您遇到问题的原因。

您可以直接使用 windows console API ,例如函数 SetConsoleTextAttribute() :

#include <windows.h>
...
   SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
                        BACKGROUND_INTENSITY|FOREGROUND_BLUE); 

注意:可以根据需要使用 | 组合颜色和强度。在你的情况下你可以简单地写 0xf3

顺便说一下,this SO question显示其他可能感兴趣的 native Windows 控制台 API 函数。

关于C++ : Using background colors with clrscr(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30242351/

相关文章:

c++ - 如何将 32 位有符号整数值转换为 C 中等效的 64 位有符号整数

c++ - “无匹配函数”-尝试插入集合时出错 (c++)

windows - ActivePerl。 .pl 文件不再执行,而是在记事本中打开

ruby-on-rails - 有没有办法在 Rails 控制台内的输出上实现类似 grep 的功能

javascript - 使用 NodeJS 记录像 pm2 这样的表

c# - 如何从 WPF 项目中运行控制台项目

c++ - 为什么访问函数必须是 const?漏洞在哪里?

c++ - 为什么8线程比2线程慢?

c - 如何在以管理员身份启动的应用程序中查找用户名

C Windows - 获取 IPv4 带宽使用统计信息