ITEEDU

第四章 图形操作函数

第四节 文本字体、字型和输出方式的设置

有关图形方式下的文本输出函数,可以通过setcolor()函数设置输出文本的颜色。另外,也可以改变文本字体大小以及选择是水平方向输出还是垂直方向输出。 

void far settexjustify(int horiz, int vert);
该函数用于定位输出字符串。

对使用outtextxy(int x, int y, char far *str textstring)函数所输出的字符串,其中哪个点对应于定位坐标(x,y)在TurboC2.0中是有规定的。如果把一个字符串看成一个长方形的图形,在水平方向显示时,字符串长方形按垂直方向可分为顶部,中部和底部三个位置,水平方向可分为左,中,右三个位置,两者结合就有9个位置。

settextjustify()函数的第一个参数horiz 指出水平方向三个位置中的一个,第二个参数vert指出垂直方向三个位置中的一个,二者就确定了其中一个位置。当规定了这个位置后,用outtextxy() 函数输出字符串时, 字符串长方形的这个规定位置就对准函数中的(x,y)位置。而对用uttext()函数输出字符串时,这个规定的位置就位于现行游标的位置。

有关参数horiz和vert的取值参见下表。

参数horiz和vert的取值
━━━━━━━━━━━━━━━━━━━━━━━━
符号常数 数值 用于 
──────────────────────── 
LEFT_TEXT 0 水平 
RIGHT_TEXT 2 水平 
BOTTOM_TEXT 0 垂直 
TOP_TEXT 2 垂直 
CENTER_TEXT 1 水平或垂直 
━━━━━━━━━━━━━━━━━━━━━━━━

void far settextstyle(int font, int direction,int charsize);
该函数用来设置输出字符的字形(由font确定)、输出方向(由direction确定)和字符大小(由charsize确定)等特性。

Turbo C2.0对函数中各个参数的规定见下列各表所示:

font的取值
 
━━━━━━━━━━━━━━━━━━━━━━━━ 
符号常数    数值  含义
────────────────────────
DEFAULT_FONT 0 8*8点阵字(缺省值) 
TRIPLEX_FONT 1 三倍笔划字体 
SMALL_FONT   2 小号笔划字体 
SANSSERIF_FONT 3 无衬线笔划字体 
GOTHIC_FONT 4 黑体笔划字 
━━━━━━━━━━━━━━━━━━━━━━━━
direction的取值
 
━━━━━━━━━━━━━━━━━━━━━━━━ 
符号常数 数值 含义 
──────────────────────── 
HORIZ_DIR 0 从左到右 
VERT_DIR 1 从底到顶 
━━━━━━━━━━━━━━━━━━━━━━━━
charsize的取值
━━━━━━━━━━━━━━━━━━━━━━━━ 
符号常数或数值 含义 
──────────────────────── 
1              8*8点阵
2              16*16点阵
3              24*24点阵
4              32*32点阵
5              40*40点阵
6              48*48点阵
7              56*56点阵
8              64*64点阵
9              72*72点阵
10             80*80点阵
USER_CHAR_SIZE=0 用户定义的字符大小 
━━━━━━━━━━━━━━━━━━━━━━━━

有关图形屏幕下文本输出和字体字型设置函数的用法请看下例:

#include<graphics.h>
#include<stdio.h>
int main()
{
	int i, gdriver, gmode;
	char s[30];
	gdriver=DETECT;
	initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
	setbkcolor(BLUE);
	cleardevice();
	setviewport(100, 100, 540, 380, 1);
	/*定义一个图形窗口*/
	setfillstyle(1, 2); /*绿色以实填充*/
	setcolor(YELLOW);
	rectangle(0, 0, 439, 279);
	floodfill(50, 50, 14);
	setcolor(12);
	settextstyle(1, 0, 8);
	/*三重笔划字体, 水平放大8倍*/
	outtextxy(20, 20, "Good Better");
	setcolor(15);
	settextstyle(3, 0, 5);
	/*无衬笔划字体, 水平放大5倍*/
	outtextxy(120, 120, "Good Better");
	setcolor(14);
	settextstyle(2, 0, 8);
	i=620;
	sprintf(s, "Your score is %d", i);
	/*将数字转化为字符串*/
	outtextxy(30, 200, s);
	/*指定位置输出字符串*/
	setcolor(1);
	settextstyle(4, 0, 3);
	outtextxy(70, 240, s);
	getch();
	closegraph();
	return 0;
}