- 在线时间
- 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 c# m4 W8 @# a6 \2 A 在vc++用API函数GetStdHandle()和SetConsoleTextAttribute()来实现彩色背景及彩色文本。下面说一下这两个函数声明及其参数的含义。首先说GetStdHandle(),其声明如下
3 n- Z" b; }! m* h/ _' d5 Q$ g4 w HANDLE GetStdHandle(
+ R+ `1 H* @7 O. s0 o, Y3 N' E# u" y' U DWORD nStdHandle 4 w3 @, V3 X$ T5 ^% w, G
);; {( W* V1 }4 q) R. w% V; Q% |
GetStdHandle()返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。 其参数nStdHandle的值为下面几种类型的一种:
) p" r; v6 k% c: s4 ?3 k- r, ` 值 含义
9 ~ |; Q @7 i( f- ?5 \ STD_INPUT_HANDLE 标准输入的句柄
/ P' f& @ M6 ]$ ]3 h8 p STD_OUTPUT_HANDLE 标准输出的句柄
t& b4 N8 N5 j) c) o4 G0 P STD_ERROR_HANDLE 标准错误的句柄# V, w6 e) L8 _5 k5 [5 {- z
函数SetConsoleTextAttribute()的作用是在console程序设置输入或输出文本的文本颜色和背景颜色。只有在此函数设置后才能显示彩色的文本。其函数原型为:2 Q0 J1 }# I. [
BOOL SetConsoleTextAttribute(
: E4 L# p6 Z5 h( k/ Y% k" p HANDLE hConsoleOutput, // console 屏幕缓冲区的句柄
2 D. T+ O% T) ` |7 A0 v* q WORD wAttributes // 文本及背景的颜色) H% P/ F7 G& A$ e# O2 ]
);
" @! J) S% ^* i* W& B; a如果函数设置文本及背景颜色成功,则返回非零;如失败返回零。其参数含义如下:
0 w% j, X9 p: O* [+ A hConsoleOutput------------- console 屏幕缓冲区的句柄。* d9 j. X/ Q9 P- {! i
WORD wAttributes-----------文本及背景的颜色。4 d, i/ v. D6 z! L8 Q* c
其文本与背景颜色可以是 FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED, and BACKGROUND_INTENSITY.和用这几种颜色组合成的任意一种颜色(这一点有点类似于RGB)至于如何组合,我不知道,^_^ 。
5 M7 U! E# M8 y- S; A 下面,我们就来写一个类似又TC下settextcolor相似功能的函数SetColor(),不过下面的函数可以同时设置背景颜色,函数的实现如下: 6 x% t* o1 Y, A1 B! c1 i$ R
void SetColor(unsigned short ForeColor,unsigned short BackGroundColor) 0 O, |" C7 X2 F* C& A6 r
{ & i ?: h% K4 R1 m" g
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //获得缓冲区句柄
4 n v: u4 `3 h4 L SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor); //设置文本及背景颜色9 B2 ~6 P9 B* u7 r
}; - k- o- S8 C# I' S- A
有了上面的函数我们就可以实现彩色文本和背景了,给自己的程序一个与众不同的输出和提示。下面我们来实现一个彩色的Hello World!。程序如下:
) i0 s# [1 B- M' @) B. s
( _& i8 d T b2 }#include<windows.h> //GetStdHandle和SetConsoleTextAttribute在头文件windows.h中
3 F" R \! E; ]2 w#include<iostream>
# r" w3 R+ b5 Y) D( l, |, Fusing namespace std;</P>, S6 ~6 u' H9 N) B7 `) L
< >void SetColor(unsigned short ForeColor=4,unsigned short BackGroundColor=0) //给参数默认值,使它 //可以接受0/1/2个参数
6 K; r5 q- M6 Y7 h3 Q; ?{ : m2 H# `# p# _5 ~# a+ ~
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //本例以输出为例
; I% `) r* b: G, [ SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor); % D: L- A* }- W0 X* s' j
}; </P># H& `% g/ X Z" }/ E- p; [
< >int main()
& c, `1 D' F* r4 H- K{8 T2 A( f8 K; V5 A d
* B2 @ h( J N+ H1 |
SetColor();
: i1 o! f: M8 e7 N std::cout<<"Hello world!"<<endl;
. \7 q6 Y/ _1 ^/ z3 @2 |* | SetColor(40,30);% A3 c+ h1 W/ p
std::cout<<"Hello world!"<<endl;2 Y: d- U4 @: ?/ f' O- q3 F% d
return 0;
* H! [, t) e x' f7 Q}: U% n4 l; m" U8 I- `* u
这样一个彩色的Hello world!程序就写好了。
, b1 I! E+ X8 U0 y</P> |
zan
|