QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 10502|回复: 0
打印 上一主题 下一主题

用VC++实现console程序显示彩色文本

[复制链接]
字体大小: 正常 放大
xShandow        

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-9-9 11:18 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>用vc++写console程序时,整天对着黑纸白字的屏幕,感觉很郁闷吧?很多人想用CONIO.H/GRAPHICS.H中的一些函数来实现,却发现VC++根本没有这些头文件。当然了CONIO.H/GRAPHICS.H是BORLAND TC/BC专有的头文件,所以vc++中根本没有这些文件。把这两个头文件COPY过来,然后用??答案当然是否定的。其实VC++中也有相关的函数来实现console彩色文本及背景的显示。下面我们就看看VC++如何实现彩色文本。
- ~  b1 m3 ?4 K$ f0 ~     在vc++用API函数GetStdHandle()和SetConsoleTextAttribute()来实现彩色背景及彩色文本。下面说一下这两个函数声明及其参数的含义。首先说GetStdHandle(),其声明如下! G; d7 R5 e4 W: c) w5 U. p
    HANDLE GetStdHandle(1 R  D6 g) P1 g& A+ x
          DWORD nStdHandle   ( r+ A7 u. k; V; ~
       );
7 e5 t- q; J6 P   GetStdHandle()返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。 其参数nStdHandle的值为下面几种类型的一种:+ i6 B, w* U7 |! g/ l! j
          值                         含义 , T- X/ m& O3 A0 c/ L% r" ~
       STD_INPUT_HANDLE           标准输入的句柄 # H- a* v$ {; ^( M# I5 Y" o* c" m
       STD_OUTPUT_HANDLE          标准输出的句柄
: S7 s+ A  c6 ?  \' V       STD_ERROR_HANDLE           标准错误的句柄
5 W7 V- H- n7 W% H; G函数SetConsoleTextAttribute()的作用是在console程序设置输入或输出文本的文本颜色和背景颜色。只有在此函数设置后才能显示彩色的文本。其函数原型为:& n+ t+ u8 ?. o2 j% M1 S" k
   BOOL SetConsoleTextAttribute() f6 W4 N* |8 o$ U& i
      HANDLE hConsoleOutput,  //  console 屏幕缓冲区的句柄5 v, F( s+ Q% x1 l- y
      WORD wAttributes        // 文本及背景的颜色- T) t" S1 J" y, S5 `' ?
   );! l' C, J$ `" H: y5 a; d
如果函数设置文本及背景颜色成功,则返回非零;如失败返回零。其参数含义如下:, L- t: |) i) F- B8 i5 o: y
       hConsoleOutput------------- console 屏幕缓冲区的句柄。" x' u, `; A7 L/ {4 {
       WORD wAttributes-----------文本及背景的颜色。
  m. q0 ]' ]7 a" n) w8 q2 G其文本与背景颜色可以是 FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED, and BACKGROUND_INTENSITY.和用这几种颜色组合成的任意一种颜色(这一点有点类似于RGB)至于如何组合,我不知道,^_^ 。
* F  x. W3 J/ a) D1 f2 P% @& W3 v     下面,我们就来写一个类似又TC下settextcolor相似功能的函数SetColor(),不过下面的函数可以同时设置背景颜色,函数的实现如下:      
. D% B( d8 x* t9 Zvoid SetColor(unsigned short ForeColor,unsigned short BackGroundColor) - R% X" D  H/ ^* y
{ % C1 D' {4 D/ j  }  r0 }0 O& v
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);            //获得缓冲区句柄: E5 _6 l3 a+ x
SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);  //设置文本及背景颜色
' ~$ k3 r6 J5 h, b};
+ A) Y) E5 \/ t& `: k; ]    有了上面的函数我们就可以实现彩色文本和背景了,给自己的程序一个与众不同的输出和提示。下面我们来实现一个彩色的Hello World!。程序如下:1 [' \2 ~+ ~6 _$ n* k
    & a# C6 M6 q: v  D  I3 {) j, i
#include&lt;windows.h&gt;        //GetStdHandle和SetConsoleTextAttribute在头文件windows.h中
, W, I5 Q5 X4 I3 l, U2 L#include&lt;iostream&gt;7 ?, G) n1 @; x3 D* `
using namespace std;</P>
, c2 u6 w2 Q  d$ M; x+ o9 k<>void SetColor(unsigned short ForeColor=4,unsigned short BackGroundColor=0) //给参数默认值,使它                                                                                                          //可以接受0/1/2个参数 & T- [% _, Q& z! F0 @; B, E
{ $ V& j3 T- ?% Q4 B. b; l0 D" x
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);    //本例以输出为例
) n6 M7 S, t. z SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor); $ ?4 H, |/ ?& H: b$ s% N7 K/ _
}; </P>
: T$ S1 X/ i9 n0 N. {<>int main()
1 H" V) P+ A6 s& h( p{
. D, G* s2 \# M2 [9 u   
' F$ h8 m4 J6 m2 P' q& K8 P  B SetColor();9 m+ H0 t; h- J8 Q
std::cout&lt;&lt;"Hello world!"&lt;&lt;endl;3 {2 ~- i6 U( L) M, c" i9 A
SetColor(40,30);* ^! K6 t8 f1 @. U7 `" X' G6 A; g6 N
std::cout&lt;&lt;"Hello world!"&lt;&lt;endl;; S* }+ c* P* ]
return 0;  O& w- {/ _, o5 y; k% F6 _
}* a0 g* Y, U+ O9 H. l( k
这样一个彩色的Hello world!程序就写好了。8 b7 }6 Y) K+ b6 b+ @/ U
</P>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2025-8-29 13:59 , Processed in 0.343256 second(s), 52 queries .

回顶部