2012-02-21 9 views
0

可能性の重複:
Colorize stdout output to Windows cmd.exe from console C++ appWindowsでcodeblocksを使ってC++で色付きテキストを出力するには?

私はWindows XP上でコードブロックを使用していますが、私は、出力色付きのテキストへの道を必要とし、多分コンソールにだけでなく、背景の色を変更応用。
conio.hの機能を試しましたが、コードブロックと互換性がないようです。

+0

、なぜあなたは答えを変更しましたか? –

+0

私は一種のnoobishです。私はあなたがいくつかの答えを受け入れることができると思った:D.Soその後、私は実現し、私は短いコードを選択しました。私のプログラムはすでに4000のコード行を(本当に)持っていないと私はそれらの多くに追加したくない。私のコードが何をしているのか理解したいと思っています。私は高度なプログラマーではないので、私のダイジェストにとってあなたのことは難しいです。 – Mihai

答えて

1

これを達成するためにいくつかの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; 
} 
+0

コードのThx:D – Mihai

2

コードのこの作品は、役立つかもしれない:

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 ;) 
+0

Thx多く。あなたは本当にこの問題に取り組んだ。 – Mihai

+0

あなたは大歓迎です:) –

関連する問題