5

似たようなことを書きたい

cout << "this text is not colorized\n";
setForeground(Color::Red);
cout << "this text shows as red\n";
setForeground(Color::Blue);
cout << "this text shows as blue\n";

Windows 7 で実行されている C++ コンソール プログラムの場合。cmd.exe の設定から、または system() を呼び出すことによって、グローバルなフォアグラウンドとバックグラウンドを変更できることを読みましたが、コード化できる文字レベルで物事を変更する方法はありますかプログラムに?最初は「ANSI シーケンス」と思っていましたが、Windows の分野では長い間失われているようです。

4

2 に答える 2

9

SetConsoleTextAttribute関数を使用できます。

BOOL WINAPI SetConsoleTextAttribute(
  __in  HANDLE hConsoleOutput,
  __in  WORD wAttributes
);

ここにあなたが見ることができる簡単な例があります。

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <winnt.h>
#include <stdio.h>
using namespace std;

int main(int argc, char* argv[])
{
   HANDLE consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
   cout << "this text is not colorized\n";
   SetConsoleTextAttribute(consolehwnd, FOREGROUND_RED);
   cout << "this text shows as red\n";
   SetConsoleTextAttribute(consolehwnd, FOREGROUND_BLUE);
   cout << "this text shows as blue\n";
}

この関数は、関数呼び出しの後に書かれたテキストに影響を与えます。したがって、最終的には元の色/属性に復元したいと思うでしょう。GetConsoleScreenBufferInfoを使用して、最初に初期色を記録SetConsoleTextAttributeし、最後にリセットを実行できます。

于 2011-10-15T14:35:52.563 に答える
1

http://gnuwin32.sourceforge.net/packages/ncurses.htmを見てください。

于 2011-10-15T14:29:58.050 に答える