1

コンソールアプリケーションの前景色のテキストのみを変更したいのですが、背景テキストの色やコンソールの背景色は変更しません。言い換えると、前景色を除いて、前の色をそのままにしておきたいのです。

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

#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;
}
4

2 に答える 2

3

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
于 2012-05-05T16:14:37.110 に答える
1

背景色も設定します(そうでない場合は黒になります)例:赤の背景に緑の書き込み(注:ビット単位のOR演算子|を使用)

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | BACKGROUND_RED);
于 2012-05-05T16:02:21.873 に答える