开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1373|回复: 7
收起左侧

[图文教程] 用VC++实现console程序显示彩色文本

[复制链接]

结帖率:100% (11/11)
发表于 2013-8-1 13:02:26 | 显示全部楼层 |阅读模式   河北省衡水市


  用vc++写console程序时,整天对着黑纸白字的屏幕,感觉很郁闷吧?很多人想用CONIO.H/GRAPHICS.H中的一些函数来实现,却发现VC++根本没有这些头文件。当然了CONIO.H/GRAPHICS.H是BORLAND TC/BC专有的头文件,所以vc++中根本没有这些文件。把这两个头文件COPY过来,然后用??答案当然是否定的。其实VC++中也有相关的函数来实现console彩色文本及背景的显示。下面我们就看看VC++如何实现彩色文本。

  在vc++用API函数GetStdHandle()和SetConsoleTextAttribute()来实现彩色背景及彩色文本。下面说一下这两个函数声明及其参数的含义。首先说GetStdHandle(),其声明如下
      HANDLE GetStdHandle(
            DWORD nStdHandle   
         );

  GetStdHandle()返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。 其参数nStdHandle的值为下面几种类型的一种:
          值        含义
       STD_INPUT_HANDLE           标准输入的句柄
       STD_OUTPUT_HANDLE          标准输出的句柄
       STD_ERROR_HANDLE           标准错误的句柄

  函数SetConsoleTextAttribute()的作用是在console程序设置输入或输出文本的文本颜色和背景颜色。只有在此函数设置后才能显示彩色的文本。其函数原型为:
     BOOL SetConsoleTextAttribute(
        HANDLE hConsoleOutput,  //  console 屏幕缓冲区的句柄
        WORD wAttributes        // 文本及背景的颜色
     );

  如果函数设置文本及背景颜色成功,则返回非零;如失败返回零。其参数含义如下:
         hConsoleOutput------------- console 屏幕缓冲区的句柄。
         WORD wAttributes-----------文本及背景的颜色。
  其文本与背景颜色可以是 FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED, and BACKGROUND_INTENSITY.和用这几种颜色组合成的任意一种颜色(这一点有点类似于RGB)至于如何组合,我不知道 。

  下面,我们就来写一个类似又TC下settextcolor相似功能的函数SetColor(),不过下面的函数可以同时设置背景颜色,函数的实现如下:
  void SetColor(unsigned short ForeColor,unsigned short BackGroundColor)
  {
  HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    //获得缓冲区句柄
  SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);  
    //设置文本及背景颜色
  };
  
  有了上面的函数我们就可以实现彩色文本和背景了,给自己的程序一个与众不同的输出和提示。下面我们来实现一个彩色的Hello World!。程序如下:
  #include<windows.h>
    //GetStdHandle和SetConsoleTextAttribute在头文件windows.h中
  #include<iostream>
  using namespace std;
  void SetColor(unsigned short ForeColor=4,unsigned short BackGroundColor=0)
  //给参数默认值,使它  
  //可以接受0/1/2个参数
  {
  HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);    //本例以输出为例
  SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);
  };

  int main()
  {
   
  SetColor();
  std::cout<<"Hello world!"<<endl;
  SetColor(40,30);
  std::cout<<"Hello world!"<<endl;
   return 0;
  }
  这样一个彩色的Hello world!程序就写好了。

  当然,你可以用这个函数让在你的程序在适当的地方显示一些特殊的输出或提示信息,这样你的程序就“与众不同”了。


结帖率:100% (2/2)
发表于 2013-8-1 14:21:47 | 显示全部楼层   湖北省孝感市
我C++ 学完了  才来玩E语言的 你发这些没用的 我要把你的耳朵拎起来 割你的静脉和动脉 真可爱

点评

没用啊 那你说什么有用呢 一看你就是C++大牛 球调教啊   河北省衡水市  发表于 2013-8-1 14:22
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)
发表于 2013-8-1 14:09:13 | 显示全部楼层   江西省赣州市
学习了,全是C++语法 看来没白学啊
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)
发表于 2013-8-1 13:31:34 | 显示全部楼层   湖南省长沙市
= =!!!
这样算违规莫?
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)
发表于 2013-8-1 13:21:42 | 显示全部楼层   湖北省孝感市
你发的东西和你签名的兔子窝博客一样 都是没用的 发点有用的

点评

其实我不想说什么 可是你说的话实在太伤人 第一 这个主题哪里没用了 如果你不学C++ 那你自然觉着没用 第二 我的博客有没有用我不知道,反正都是我一个字一个字码出来的。说话慎重,考虑下别人的感受。   河北省衡水市  发表于 2013-8-1 14:01
请问哪里没用了   河北省衡水市  发表于 2013-8-1 13:58
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表