QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 10794|回复: 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++如何实现彩色文本。3 x& q8 p! s' o. ~; S/ E$ s
     在vc++用API函数GetStdHandle()和SetConsoleTextAttribute()来实现彩色背景及彩色文本。下面说一下这两个函数声明及其参数的含义。首先说GetStdHandle(),其声明如下' {; w* D: F) n/ C: ~) t7 }
    HANDLE GetStdHandle(3 _6 B+ a+ g7 U8 S# M: H
          DWORD nStdHandle   
9 I$ }' j+ {) ]       );
( f3 z. L# v% c0 x: r8 n   GetStdHandle()返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。 其参数nStdHandle的值为下面几种类型的一种:% W# ~+ D! S2 c2 e4 r8 y7 ?, H% K
          值                         含义 1 q4 ]$ R. [4 S1 }
       STD_INPUT_HANDLE           标准输入的句柄
+ M! g# w  ^0 R, R       STD_OUTPUT_HANDLE          标准输出的句柄   A5 B  y# y6 A, t" {/ L' a
       STD_ERROR_HANDLE           标准错误的句柄
6 p- T9 f3 Z7 d6 o函数SetConsoleTextAttribute()的作用是在console程序设置输入或输出文本的文本颜色和背景颜色。只有在此函数设置后才能显示彩色的文本。其函数原型为:1 }# V1 ?  m- A( l1 [
   BOOL SetConsoleTextAttribute($ e& S" S, G3 Y0 W9 c# q. x
      HANDLE hConsoleOutput,  //  console 屏幕缓冲区的句柄
: N+ O5 G$ N' P      WORD wAttributes        // 文本及背景的颜色
% ^: d5 Q7 d0 v' E: a8 j   );; A# S6 n+ c- {* f7 L8 a
如果函数设置文本及背景颜色成功,则返回非零;如失败返回零。其参数含义如下:
4 s+ {+ \' }; w  e6 b' s) h       hConsoleOutput------------- console 屏幕缓冲区的句柄。
% n5 Z# H# W5 c: x$ n% f4 Q* b       WORD wAttributes-----------文本及背景的颜色。9 ?; r" G6 S2 Q% o! Q" J
其文本与背景颜色可以是 FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED, and BACKGROUND_INTENSITY.和用这几种颜色组合成的任意一种颜色(这一点有点类似于RGB)至于如何组合,我不知道,^_^ 。$ K  B1 R& b( l, N1 b
     下面,我们就来写一个类似又TC下settextcolor相似功能的函数SetColor(),不过下面的函数可以同时设置背景颜色,函数的实现如下:      
' t5 {5 [9 i2 W; Evoid SetColor(unsigned short ForeColor,unsigned short BackGroundColor) 7 b& a: K: `3 h
{ ( W$ |0 l. {+ C* E6 F
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);            //获得缓冲区句柄6 U; `$ A6 Q! c. H
SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);  //设置文本及背景颜色
; g9 p. H) o9 }};
' X4 L2 p( a* g- q# q7 V    有了上面的函数我们就可以实现彩色文本和背景了,给自己的程序一个与众不同的输出和提示。下面我们来实现一个彩色的Hello World!。程序如下:7 H: G* }5 `  B# j( F; H
   
' w0 ~+ Q2 d8 K, M#include&lt;windows.h&gt;        //GetStdHandle和SetConsoleTextAttribute在头文件windows.h中
: i3 k5 m  w6 E2 R! S6 v#include&lt;iostream&gt;, F% Q$ ^' ?3 `" Y
using namespace std;</P>6 O4 T) Q% `$ j! F, \
<>void SetColor(unsigned short ForeColor=4,unsigned short BackGroundColor=0) //给参数默认值,使它                                                                                                          //可以接受0/1/2个参数 ( l( {9 i# q4 F4 n0 h
{
; H- e, k2 {( c HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);    //本例以输出为例
) a; F* I& T0 a% u: E$ _0 e SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor); 9 Q5 c) }* ]. p, P9 a
}; </P>5 z2 z4 x+ L' t# q: Q7 Z3 K. B
<>int main()8 d) V/ a: f- p" d4 g1 l+ a6 z
{( T/ ~: S$ ~4 q
   
7 z# c; Y3 ?8 l3 s$ M& l SetColor();
1 o* m/ \8 z: W8 N% W+ B% U std::cout&lt;&lt;"Hello world!"&lt;&lt;endl;6 |7 U2 A" ]& ?- x6 |: [  w
SetColor(40,30);, Y) d; P0 s- N) r
std::cout&lt;&lt;"Hello world!"&lt;&lt;endl;; R" z1 m! N" `% U1 J
return 0;1 c: \. F) t% L9 }+ T
}
: G2 {& G; r4 ]* K7 x0 Q这样一个彩色的Hello world!程序就写好了。& J# q" x; s3 R$ G* a* G+ p) E5 w
</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, 2026-9-1 15:48 , Processed in 0.619110 second(s), 51 queries .

回顶部