2012-05-05 23 views
0

私は、コンソールアプリケーションの前景色のテキストのみを変更したいです。バックグラウンドテキストの色やコンソールの背景色は変更しません。他の言葉では:私は前景の色を除いて、前の色を維持したい。SetConsoleTextAttribute:前景のみ

現在、以下のコードを使用していますが、テキストの下の背景も変更されています。使用GetConsoleScreenBufferInfoEx

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | BACKGROUND_RED); 
+0

。両方を指定する必要があるため、既存の背景色も使用してください。クリスが示唆したように。 –

答えて

1

現在のカラー属性を取得し、フォアグラウンドのみを変更します。

以下、テストされていないとはいえ、どんな背景色あなたが始める動作するべきではありません:あなたは黒に背景を変更

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 
2

|:(ビット単位のOR演算子を使用します)赤の背景に グリーンライティングを:たとえば (それ以外の場合は黒になります)だけでなく、背景色を設定し

#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; 
} 
関連する問題