- 在线时间
- 0 小时
- 最后登录
- 2005-9-21
- 注册时间
- 2004-4-27
- 听众数
- 1
- 收听数
- 0
- 能力
- 0 分
- 体力
- 1027 点
- 威望
- 0 点
- 阅读权限
- 40
- 积分
- 385
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 153
- 主题
- 43
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   28.33% 该用户从未签到
国际赛参赛者
 |
< >用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<windows.h> //GetStdHandle和SetConsoleTextAttribute在头文件windows.h中
, W, I5 Q5 X4 I3 l, U2 L#include<iostream>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<<"Hello world!"<<endl;3 {2 ~- i6 U( L) M, c" i9 A
SetColor(40,30);* ^! K6 t8 f1 @. U7 `" X' G6 A; g6 N
std::cout<<"Hello world!"<<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
|