数学建模社区-数学中国

标题: 用VC++实现console程序显示彩色文本 [打印本页]

作者: xShandow    时间: 2004-9-9 11:18
标题: 用VC++实现console程序显示彩色文本
<>用vc++写console程序时,整天对着黑纸白字的屏幕,感觉很郁闷吧?很多人想用CONIO.H/GRAPHICS.H中的一些函数来实现,却发现VC++根本没有这些头文件。当然了CONIO.H/GRAPHICS.H是BORLAND TC/BC专有的头文件,所以vc++中根本没有这些文件。把这两个头文件COPY过来,然后用??答案当然是否定的。其实VC++中也有相关的函数来实现console彩色文本及背景的显示。下面我们就看看VC++如何实现彩色文本。
- c0 o- C! W9 N     在vc++用API函数GetStdHandle()和SetConsoleTextAttribute()来实现彩色背景及彩色文本。下面说一下这两个函数声明及其参数的含义。首先说GetStdHandle(),其声明如下7 B$ X) Q5 N' [3 K( Q: y+ S
    HANDLE GetStdHandle(7 k8 n( s7 x3 E4 _
          DWORD nStdHandle   
" z$ d% _. q7 G/ Y6 s       );- m2 L5 E. z% d3 B
   GetStdHandle()返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。 其参数nStdHandle的值为下面几种类型的一种:
( K/ ?: d& N$ _/ S5 M% k          值                         含义 0 J% P  I% U, g% b
       STD_INPUT_HANDLE           标准输入的句柄
; f6 ~. O$ Z0 \0 w       STD_OUTPUT_HANDLE          标准输出的句柄
" s3 v, o8 D0 B4 [" P3 N       STD_ERROR_HANDLE           标准错误的句柄
7 T$ t% X/ V1 ?函数SetConsoleTextAttribute()的作用是在console程序设置输入或输出文本的文本颜色和背景颜色。只有在此函数设置后才能显示彩色的文本。其函数原型为:) T4 ?) @( S/ t: e4 \. F! Y
   BOOL SetConsoleTextAttribute(
# a9 ?! y7 ~5 k      HANDLE hConsoleOutput,  //  console 屏幕缓冲区的句柄1 [2 j5 ?) J: [8 e  s) v
      WORD wAttributes        // 文本及背景的颜色
% W# [" a! _( ~& k0 {" |, q   );
2 y: e9 k( B& T/ Y+ q5 p7 X如果函数设置文本及背景颜色成功,则返回非零;如失败返回零。其参数含义如下:
, N& G  e- g( h: [% _, n       hConsoleOutput------------- console 屏幕缓冲区的句柄。) X8 K, k: c4 ], C" `
       WORD wAttributes-----------文本及背景的颜色。
2 b* x, l2 m. z" V其文本与背景颜色可以是 FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED, and BACKGROUND_INTENSITY.和用这几种颜色组合成的任意一种颜色(这一点有点类似于RGB)至于如何组合,我不知道,^_^ 。1 ]0 d2 ?0 c$ t/ D) @& x
     下面,我们就来写一个类似又TC下settextcolor相似功能的函数SetColor(),不过下面的函数可以同时设置背景颜色,函数的实现如下:      
/ S0 c( T8 [+ |' E7 b6 Uvoid SetColor(unsigned short ForeColor,unsigned short BackGroundColor)
6 Y3 C; P. `: W! l: i* i{
! E8 S5 J; T6 t. a- R5 t HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);            //获得缓冲区句柄3 J! a& b. c9 e; [- ^, k' Q
SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);  //设置文本及背景颜色, A3 t( C; i3 S' s' k6 K
}; 5 f4 N2 F! R  o$ W
    有了上面的函数我们就可以实现彩色文本和背景了,给自己的程序一个与众不同的输出和提示。下面我们来实现一个彩色的Hello World!。程序如下:+ A8 V  `4 O5 s9 _
   
3 U  R2 g" G$ y4 t, \#include&lt;windows.h&gt;        //GetStdHandle和SetConsoleTextAttribute在头文件windows.h中" M) I- S: r- }# e& o1 r$ i
#include&lt;iostream&gt;3 ?3 h- U4 S. u; z  L' E
using namespace std;</P>$ U3 S# B" G3 ^( M! y' t
<>void SetColor(unsigned short ForeColor=4,unsigned short BackGroundColor=0) //给参数默认值,使它                                                                                                          //可以接受0/1/2个参数 ( O$ E: N# [: n7 T5 [/ l8 |, T
{
) z- X* L$ @+ F HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);    //本例以输出为例
" `. ^& j, j6 l; R SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor); 3 l5 [$ I5 J& P9 Q0 Z9 R
}; </P>
/ D0 X1 u' u. z2 t% W<>int main()
/ w0 t( ^: Z+ t0 I{
2 F4 B* m, ^5 M+ U   
. u1 |! W6 ~2 u6 J+ U, c SetColor();3 f/ H* q& @3 r
std::cout&lt;&lt;"Hello world!"&lt;&lt;endl;1 h8 \7 S  @* u
SetColor(40,30);2 h2 r5 G2 u/ p1 f
std::cout&lt;&lt;"Hello world!"&lt;&lt;endl;5 s' u9 S9 o" c, F! A: C
return 0;
$ Z' B7 M9 K; U; A" g: f7 B6 J}
+ |# w" x' c% z% ~5 m9 s9 B# y/ `这样一个彩色的Hello world!程序就写好了。* X! v0 ]" t2 x& d
</P>




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5