| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 623 人关注过本帖
标题:控制台的颜色控制
只看楼主 加入收藏
cashtycoon
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-6-26
收藏
 问题点数:0 回复次数:0 
控制台的颜色控制

C++编程在控制台窗口中输出颜色阵列
2. 问题详细描述
设计一个在控制台输出彩带的程序,要求首先提示用户选择颜色阵列的类型(规则颜色、随机颜色或退出),然后根据用户的输入,输出相应的阵列。然后再次要求用户选择阵列类型或退出程序。
要求编写多个函数分别实现上述功能,而后在main函数中进行调用。
3. 问题的解决方案:
根据问题的描述,可以按照程序要求的功能采用结构化的设计思想。
首先输出颜色阵列的过程是个循环过程,当用户的输入满足循环的退出条件时结束程序的运行(在示例程序中,循环的退出条件是用户输入了0和1之外的数值)。
在用户输入了相应的选择后,在屏幕上输出阵列。因为控制台只支持16种颜色,所以输出的阵列应该是16*16的阵列。对于规则的颜色阵列,各行前景色颜色不同,各列背景色不同,每个阵列元素输出的字符均是大写的‘Z’。而对于随机阵列来说16*16的阵列中的每个元素的前景色、背景色和输出字符都是随机的。
四、主要技术问题的描述
根据三的分析,主要问题在于:
1. 控制台的基本概念
控制台(Console)是一个基于字符界面的交互平台。Windows 2000里面自带的控制台同样也是一个基于字符界面的交互平台。我们本学期实验所编写的程序都是基于控制台的C++程序。
在默认设置下,Windows 2000的控制台能够显示25行80列的字符,我们可以把控制台看作是一个有25行80列的一个矩阵,每个矩阵的元素能够显示一个标准的ASCII字符(汉字需要两个元素来显示)。
2. 控制台的颜色控制
控制台中的每个元素可以使用独立的前景色和背景色。在Windows 2000的控制台中可以使用的颜色有16种,见下图:

上图中的颜色编码自左至右依次是0至15,0为黑色,15为白色。前景色和背景色都只有这16种颜色。
3. 控制台颜色的控制时机
因为控制台不能更改已经输出字符的颜色设置,所以要想更改输出的字符的颜色设置,必须在输出之前更改控制台的颜色配置。
要改变控制台的颜色设置需要调用两个Windows操作系统的API函数。GetStdHandle函数用来获得当前控制台的句柄,用SetConsoleTextAttribute函数来改变选中控制台的颜色控制。这两个函数的声明存在于<windows.h>文件中。可以将这两个调用封装到SetColor函数中:

例如:如果需要改变当前的控制台输出颜色为白底红字,则可以书写如下代码:

这段代码就可以输出白底红字的“Hello World”字符串了。
4. cout的缓冲区刷新
cout对象默认情况下并不会将用户的输出送到控制台,而是暂时存在输出缓冲区里面,而控制台的颜色控制只在向控制台输出的时候才生效。所以只有强制刷新输出缓冲区的时候颜色设置才会生效。例如我们要输出两个字符A,第一个是白底红字,第二个是红底白字,那么下面的代码:

输出的将是两个红底白字的字符“A”。因为虽然输出第一个“A”之前把控制台设置为白底红字,但是此时并没有把第一个“A”输出到控制台,而只是存放于输出缓冲区里面。然后控制台的颜色被设置为红底白字,然后输出“A”。最终程序结束的时候自动强制刷新控制台,把输出缓冲区里面的两个字符“A”都发送给控制台,因为此时的控制台颜色是红底白字,所以两个“A”都被显示为红底白字。
为了强制刷新控制台,可以使用endl和flush两个操作符,endl表示先换行然后强制刷新,flush表示直接强制刷新而不换行,所以上面的代码只要在每个cout语句的最后加上“<< flush”就可以把输出两个不同颜色配置的字符“A”了(参看下面的代码)。

5. 随机数的产生
随机数的产生可以使用rand函数,该函数的具体使用方法请查阅MSDN。
五、创新要求
在基本要求达到后,进行创新设计:
1. 使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明;
2. 增加斜向条纹等各种形状的输出。
搜索更多相关主题的帖子: 控制台 颜色 
2007-06-26 15:46
快速回复:控制台的颜色控制
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019734 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved