2012-05-05 7 views
0

Я хотел бы изменить ТОЛЬКО цветной текст переднего плана моего консольного приложения, а не цвет фона фона или цвет фона консоли. Другими словами: Я хочу сохранить предыдущие цвета, как они, кроме цвета текста переднего плана.SetConsoleTextAttribute: только передняя панель

В настоящее время я использую код ниже, но фон под изменением текста тоже.

#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

Вы изменили фон черный. Вам нужно указать оба, поэтому используйте существующий цвет фона. Как намекнул Крис. –

ответ

1

Установить цвет фона, а также (в противном случае он будет идти к черному) Например: Зеленый надписи на красном фоне (примечание: используйте побитовый оператор ИЛИ |)

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | BACKGROUND_RED); 
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 
Смежные вопросы