- 在线时间
- 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++如何实现彩色文本。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<windows.h> //GetStdHandle和SetConsoleTextAttribute在头文件windows.h中
: i3 k5 m w6 E2 R! S6 v#include<iostream>, 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<<"Hello world!"<<endl;6 |7 U2 A" ]& ?- x6 |: [ w
SetColor(40,30);, Y) d; P0 s- N) r
std::cout<<"Hello world!"<<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
|