2009-05-22 7 views
7

में कंसोल के लिए रंगीन टेक्स्ट प्रिंट करें मैं एक कंसोल क्लास लिखना चाहता हूं जो रंगीन पाठ को कंसोल पर आउटपुट कर सकता है।सी ++

तो मैं (मूल रूप से printf के लिए एक आवरण) की तरह कुछ कर सकते हैं:

Console::Print("This is a non-coloured message\n"); 
Console::Warning("This is a YELLOW warning message\n"); 
Console::Error("This is a RED error message\n"); 

मैं Windows कंसोल के लिए अलग अलग रंग का पाठ कैसे प्रिंट होगा?

उत्तर

9

बाहर चेक this guide। मैं एक कस्टम जोड़तोड़ कर तो मैं कुछ ऐसा कर सकता है जाएगा:

std::cout << "standard text" << setcolour(red) << "red text" << std::endl; 

Here की कैसे अपनी खुद की जोड़तोड़ को लागू करने पर एक छोटे से गाइड।

एक त्वरित कोड उदाहरण:

#include <iostream> 
#include <windows.h> 
#include <iomanip> 

using namespace std; 

enum colour { DARKBLUE = 1, DARKGREEN, DARKTEAL, DARKRED, DARKPINK, DARKYELLOW, GRAY, DARKGRAY, BLUE, GREEN, TEAL, RED, PINK, YELLOW, WHITE }; 

struct setcolour 
{ 
    colour _c; 
    HANDLE _console_handle; 


     setcolour(colour c, HANDLE console_handle) 
      : _c(c), _console_handle(0) 
     { 
      _console_handle = console_handle; 
     } 
}; 

// We could use a template here, making it more generic. Wide streams won't 
// work with this version. 
basic_ostream<char> &operator<<(basic_ostream<char> &s, const setcolour &ref) 
{ 
    SetConsoleTextAttribute(ref._console_handle, ref._c); 
    return s; 
} 

int main(int argc, char *argv[]) 
{ 
    HANDLE chandle = GetStdHandle(STD_OUTPUT_HANDLE); 
    cout << "standard text" << setcolour(RED, chandle) << " red text" << endl; 

    cin.get(); 
} 
+0

यह कोड वास्तव में काम नहीं करता है, आपका पिछला संस्करण जिसे आपने अभी बदल दिया है। बीमार डबल चेक मैं सही है हालांकि –

+0

@ ब्रॉक वूल्फ: हाँ, क्षमा करें। मुझे हैंडल की प्रतिलिपि में कोई समस्या थी। – Skurmedel

+0

अद्भुत जो पूरी तरह से काम करता है। धन्यवाद! : डी –

1

मैंने किया था के लिए एक खोज "C++ सांत्वना रंग का पाठ लिखने" और के बारे में 4 या 5 पर this page के साथ आया था मैं इसे यहाँ पोस्ट चाहते हैं साइट एक प्रति & पेस्ट खंड मैंने सोचा नहीं है (लिंक रोट पर एक और सवाल भी इस के लिए प्रेरित किया):

#include <stdlib.h> 
#include <windows.h> 
#include <iostream> 

using namespace std; 

enum Color { DBLUE=1,GREEN,GREY,DRED,DPURP,BROWN,LGREY,DGREY,BLUE,LIMEG,TEAL, 
    RED,PURPLE,YELLOW,WHITE,B_B }; 
/* These are the first 16 colors anyways. You test the other hundreds yourself. 
    After 15 they are all combos of different color text/backgrounds. */ 

bool quit; 

void col(unsigned short color) 
{ 
    HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(hcon,color); 
} 

istream &operator>> (istream &in, Color &c) 
{ 
    int tint; 
    cin >> tint; 
    if (tint==-1) quit=true; 
    c=(Color)tint; 
} 

int main() 
{ 
    do { 
     col(7); // Defaults color for each round. 
     cout << "Enter a color code, or -1 to quit... "; 
     Color y; 
     cin >> y; // Notice that >> is defined above for Color types. 
     col(y); // Sets output color to y. 
     if (!quit) cout << "Color: " << (int)y << endl; 
    } while (!quit); 
    return 0; 
} 

के लिए सी # वहाँ this page

+0

पहले लिंक आप था जानकारीपूर्ण गया था कि भले ही यह था सी #। –

+0

खोज शब्द "C# console.write रंगीन पाठ" उस मामले में – ChrisF

0

Look here पता लगाने के लिए Windows में सांत्वना और here कैसे उस पर विशेषताओं को लागू करने के लिए लिखने के लिए कैसे।
आप किस ओएस पर काम कर रहे हैं?

0
#include <windows.h> 
#include <iostream.h> 
using namespace std; 

int main() 
{ 
    HANDLE hOut; 

    hOut = GetStdHandle(STD_OUTPUT_HANDLE); 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_RED); 
    cout << "Red  " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_RED | 
          BACKGROUND_INTENSITY); 
    cout << "Red  " << endl; 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_GREEN); 
    cout << "Green " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_GREEN | 
          BACKGROUND_INTENSITY); 
    cout << "Green " << endl; 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_BLUE); 
    cout << "Blue " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_BLUE | 
          BACKGROUND_INTENSITY); 
    cout << "Blue " << endl; 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_RED | 
          BACKGROUND_GREEN); 
    cout << "Yellow " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_RED | 
          BACKGROUND_GREEN | 
          BACKGROUND_INTENSITY); 
    cout << "Yellow " << endl; 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_GREEN | 
          BACKGROUND_BLUE); 
    cout << "Cyan " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_GREEN | 
          BACKGROUND_BLUE | 
          BACKGROUND_INTENSITY); 
    cout << "Cyan " << endl; 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_BLUE | 
          BACKGROUND_RED); 
    cout << "Magenta " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_BLUE | 
          BACKGROUND_RED | 
          BACKGROUND_INTENSITY); 
    cout << "Magenta " << endl; 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_RED | 
          BACKGROUND_GREEN | 
          BACKGROUND_BLUE); 
    cout << "White " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_RED | 
          BACKGROUND_GREEN | 
          BACKGROUND_BLUE | 
          BACKGROUND_INTENSITY); 
    cout << "White " << endl; 

    return 0; 
} 
+0

उम्मीद है कि यह काम करता है – madhudskumar

0

उपयोग इन कार्यों

enum c_color{BLACK=30,RED=31,GREEN=32,YELLOW=33,BLUE=34,MAGENTA=35,CYAN=36,WHITE=37}; 
enum c_decoration{NORMAL=0,BOLD=1,FAINT=2,ITALIC=3,UNDERLINE=4,RIVERCED=26,FRAMED=51}; 
void pr(const string str,c_color color,c_decoration decoration=c_decoration::NORMAL){ 
    cout<<"\033["<<decoration<<";"<<color<<"m"<<str<<"\033[0m"; 
} 

void prl(const string str,c_color color,c_decoration decoration=c_decoration::NORMAL){ 
    cout<<"\033["<<decoration<<";"<<color<<"m"<<str<<"\033[0m"<<endl; 
}