可能性の重複:
Colorize stdout output to Windows cmd.exe from console C++ appWindowsでcodeblocksを使ってC++で色付きテキストを出力するには?
私はWindows XP上でコードブロックを使用していますが、私は、出力色付きのテキストへの道を必要とし、多分コンソールにだけでなく、背景の色を変更応用。
conio.h
の機能を試しましたが、コードブロックと互換性がないようです。
可能性の重複:
Colorize stdout output to Windows cmd.exe from console C++ appWindowsでcodeblocksを使ってC++で色付きテキストを出力するには?
私はWindows XP上でコードブロックを使用していますが、私は、出力色付きのテキストへの道を必要とし、多分コンソールにだけでなく、背景の色を変更応用。
conio.h
の機能を試しましたが、コードブロックと互換性がないようです。
これを達成するためにいくつかのWindows API機能を使いたいようです。
Cygwinをウインドウに使用していたのであれば、少し楽です。
ここdaniwebのan example礼儀だ:
// color your text in Windows console mode
// colors are 0=black 1=blue 2=green and so on to 15=white
// colorattribute = foreground + background * 16
// to get red text on yellow use 4 + 14*16 = 228
// light red on yellow would be 12 + 14*16 = 236
// a Dev-C++ tested console application by vegaseat 07nov2004
#include <iostream>
#include <windows.h> // WinApi header
using namespace std; // std::cout, std::cin
int main()
{
HANDLE hConsole;
int k;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
// you can loop k higher to see more color choices
for(k = 1; k < 255; k++)
{
// pick the colorattribute k you want
SetConsoleTextAttribute(hConsole, k);
cout << k << " I want to be nice today!" << endl;
}
cin.get(); // wait
return 0;
}
コードのThx:D – Mihai
コードのこの作品は、役立つかもしれない:
WinConsole.h
#pragma once
typedef void* HANDLE;
class WinConsole
{
public:
WinConsole(void);
~WinConsole(void);
void SetColour(WORD colour);
WORD GetDefaultColour() const;
void Reset();
private:
HANDLE fConsoleHandle;
CONSOLE_SCREEN_BUFFER_INFO fDefaultScreenBufferInfo;
};
WinConsole.cpp
#include "WinConsole.h"
#define WIN32_LEAN_AND_MEAN
#define <Windows.h>
WinConsole::WinConsole(void)
{
fConsoleHandle = ::GetStdHandle(STD_OUTPUT_HANDLE);
if (INVALID_HANDLE_VALUE != fConsoleHandle)
{
::GetConsoleScreenBufferInfo(fConsoleHandle, &fDefaultScreenBufferInfo);
}
}
WinConsole::~WinConsole(void)
{
}
void WinConsole::SetColour(WORD colour)
{
if (INVALID_HANDLE_VALUE != fConsoleHandle)
{
::CONSOLE_SCREEN_BUFFER_INFO info = { sizeof(CONSOLE_SCREEN_BUFFER_INFO), 0 };
if(::GetConsoleScreenBufferInfo(fConsoleHandle, &info))
{
::SetConsoleTextAttribute(fConsoleHandle, (info.wAttributes & 0xff00)|colour);
}
}
}
void WinConsole::Reset()
{
if (INVALID_HANDLE_VALUE != fConsoleHandle)
{
::SetConsoleTextAttribute(fConsoleHandle, fDefaultScreenBufferInfo.wAttributes);
}
}
WORD WinConsole::GetDefaultColour() const
{
if (INVALID_HANDLE_VALUE != fConsoleHandle)
{
return (WORD)(fDefaultScreenBufferInfo.wAttributes & 0x00ff);
}
return e_FGRed | e_FGGreen | e_FGBlue;
}
使用法:好奇心のうち
WinConsole console;
console.SetColour(FOREGROUND_RED|BACKGROUND_BLUE); // Superman style ;)
Thx多く。あなたは本当にこの問題に取り組んだ。 – Mihai
あなたは大歓迎です:) –
、なぜあなたは答えを変更しましたか? –
私は一種のnoobishです。私はあなたがいくつかの答えを受け入れることができると思った:D.Soその後、私は実現し、私は短いコードを選択しました。私のプログラムはすでに4000のコード行を(本当に)持っていないと私はそれらの多くに追加したくない。私のコードが何をしているのか理解したいと思っています。私は高度なプログラマーではないので、私のダイジェストにとってあなたのことは難しいです。 – Mihai