我想更改控制台应用程序的前景色文本,而不是背景文本颜色和控制台背景颜色。换句话说:我希望保留以前的颜色,除了前景文字颜色。
目前我使用下面的代码,但文本背景也会改变。
#include <windows.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
cout << "green?" << endl;
cin.ignore();
return 0;
}
答案 0 :(得分:2)
使用GetConsoleScreenBufferInfoEx
检索当前颜色属性,并仅更改前景。
以下(尽管未经测试)无论您从哪种背景颜色开始都应该有效:
HANDLE outputHandle = GetStdHandle (STD_OUTPUT_HANDLE); //used twice
CONSOLE_SCREEN_BUFFER_INFOEX cbie; //hold info
//article didn't say this was necessary, but to be on the safe side...
cbie.cbSize = sizeof (CONSOLE_SCREEN_BUFFER_INFOEX);
GetConsoleScreenBufferInfoEx (outputHandle, &cbie); //get info
//first, cancel out all foreground attributes
//then, set the ones you want (I use bright red)
cbie.wAttributes &=
~(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
cbie.wAttributes |= (FOREGROUND_RED | FOREGROUND_INTENSITY);
SetConsoleScreenBufferInfoEx (outputHandle, &cbie); //pass updated info back
答案 1 :(得分:1)
同样设置背景颜色(否则会变为黑色) 例如: 红色背景上的绿色写作(注意:使用按位OR运算符|)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | BACKGROUND_RED);