可能重複:
Colorize stdout output to Windows cmd.exe from console C++ app如何在Windows上使用代碼塊在C++中輸出彩色文本?
我使用的代碼塊在Windows XP和我需要一種方法來輸出彩色文本,也許改變背景顏色,以及在控制檯應用。
我嘗試了conio.h
函數,但它們似乎與代碼塊不兼容。
可能重複:
Colorize stdout output to Windows cmd.exe from console C++ app如何在Windows上使用代碼塊在C++中輸出彩色文本?
我使用的代碼塊在Windows XP和我需要一種方法來輸出彩色文本,也許改變背景顏色,以及在控制檯應用。
我嘗試了conio.h
函數,但它們似乎與代碼塊不兼容。
它看起來像你會想要使用一些Windows API功能來實現這一點。
如果你使用Cygwin的Windows,它會更容易一些。
這裏的an example禮貌daniweb的:
// 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 2012-02-21 16:25:04
這段代碼可以幫助:
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 2012-02-21 16:25:53
不客氣:) – 2012-02-21 16:27:39
出於好奇,你爲什麼改變答案? – 2012-02-21 16:41:26
Im kind of noobish。我認爲你可以接受幾個答案:D.So然後我意識到,我選擇了短代碼。我的程序已經有4000代碼行(真的),我不想添加到其中許多。而且我也想了解我的代碼是什麼。你們很難消化,因爲我不是高級程序員。 – Mihai 2012-02-21 16:45:19