给控制台程序点“颜色”瞧瞧


    你对控制台程序的第一感受是什么,是否觉得黑漆漆的,死气沉沉?那么就试着让它变的活泼一点吧,下面我们就动手改变下它的字体颜色,思路非常简单,首先获取到标准输出的句柄,然后设置下控制台的文本属性就可以了。
#pragma  once
#include 
< iostream >
#include 
< windows.h >

inline std::ostream
&  blue(std::ostream  & s)
{
    HANDLE hStdout 
= GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(hStdout, FOREGROUND_BLUE
        
|FOREGROUND_GREEN|FOREGROUND_INTENSITY);
    
return s;
}


inline std::ostream
&  red(std::ostream  & s)
{
    HANDLE hStdout 
= GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出句柄
    SetConsoleTextAttribute(hStdout,FOREGROUND_RED|FOREGROUND_INTENSITY);//设置文本颜色
    return s;
}


inline std::ostream
&  green(std::ostream  & s)
{
    HANDLE hStdout 
= GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(hStdout, 
        FOREGROUND_GREEN
|FOREGROUND_INTENSITY);
    
return s;
}


inline std::ostream
&  yellow(std::ostream  & s)
{
    HANDLE hStdout 
= GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(hStdout, 
        FOREGROUND_GREEN
|FOREGROUND_RED|FOREGROUND_INTENSITY);
    
return s;
}


inline std::ostream
&  white(std::ostream  & s)
{
    HANDLE hStdout 
= GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(hStdout, 
        FOREGROUND_RED
|FOREGROUND_GREEN|FOREGROUND_BLUE);//R,G,B混合就为白色
    return s;
}




struct  color 
{
    color(WORD attribute):m_color(attribute)
{};
    WORD m_color;
//颜色值
}
;

// 使用模板函数,推荐这种方式

template 
< class  _Elem,  class  _Traits >
std::basic_ostream
< _Elem,_Traits >&  
operator << (std::basic_ostream < _Elem,_Traits >&  i, color &  c)
{
    HANDLE hStdout
=GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(hStdout,c.m_color);
    
return i;
}


#include  " stdafx.h "
#include 
" ConsoleColor.h "

int  main() 

    std::cout
<<red<<"嘿嘿,这可是红色的字体哦"<<std::endl;
    std::cout 
<< green << "再看看这个呢,绿色的,喜欢不?"<< white << std::endl;
    std::cout 
<< color(FOREGROUND_RED|FOREGROUND_GREEN) << "该死,这颜色嘎难看了!"<< white << std::endl;
    system(
"pause");  

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值