微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255);">1.BGI字体
微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255);">在图形方式下,BGI提供了两种输出文本的方式:一种是位象字符(或称点阵字符);另一种是笔划字体(或称矢量字符)。其中位映象字符为缺省方式,即在一般情况下输出文本时,都是以位映象字符显示的。
笔划字体不是以位模式表示的,每个字符被定义成一系列的线段或笔划的组合。笔划字体可以灵活地改变其大小,而且不会降低其分别率。系统提供了4种不同的笔划字体,即:小号字体、三倍字体、无寸线字体和黑体。每种笔划字体都存放在独立的字体文件中,文件扩展名为.chr,在一般情况下,安装在bgi目录下。为了使用笔划字体,必须装入相应的字体文件。
2.文本输出
(1).settextstyle函数
函数settextstyle用于在使用笔划字体之前装入字体文件。其调用格式为:
Settextstyle(font,direction,csize);
函数所需要的三个参数,其含义如下:
font:是一个整型数,用来指定所使用的字体,其取值见表9-8所示:
表9-8 font字体
Direction:是一个整型数。用来指定文本的输出方向,取值见表9-9所示:
表9-9 Direction取值
Csize:是一个整型数,表示字符的大小。该参数实际上是一个放大系数,它表示对8*8点阵的放大倍数,其取值的范围是1—10,它既影响点阵字符,也影响笔划字体。
调用settextstyle函数后,设置了输出字符的字体、输出方向以及大小,这些设置将影响下面的outtext和outtextxy所产生的文本输出。
(2).outtext函数
函数outtext用于在当前位置输出一个文本字符串。其调用格式为:
Outtext(*text);
参数text是一个字符串。例如:
Outtext(“china university of Mining and Technology”);将在当前位置输出一个字符串:chinauniversity of Mining and Technology
(3).outtextxy函数
函数outtextxy用于在指定位置输出一个字符串。其调用格式为:
Outtextxy(x,y,*text);
参数x,y为指定坐标点,text为字符串。
【例9-10】钟表图形绘制
#include <graphics.h>
#include <conio.h>
#include <math.h>
#define PI 3.14159
void Draw(int hour, int minute, int second)
{
double a_hour, a_min,a_sec; /*时、分、秒针的弧度值*/
int x_hour, y_hour, x_min,y_min, x_sec, y_sec; /*时、分、秒针的末端位置*/
/* 计算时、分、秒针的弧度值*/
a_sec = second * 2 * PI /60;
a_min = minute * 2 * PI /60 + a_sec / 60;
a_hour= hour * 2 * PI / 12+ a_min / 12;
/* 计算时、分、秒针的末端位置*/
x_sec = 320 + (int)(120 *sin(a_sec));
y_sec = 240 - (int)(120 *cos(a_sec));
x_min = 320 + (int)(100 *sin(a_min));
y_min = 240 - (int)(100 *cos(a_min));
x_hour= 320 + (int)(70 *sin(a_hour));
y_hour= 240 - (int)(70 *cos(a_hour));
/*画时针*/
setlinestyle(PS_SOLID,NULL);
setcolor(WHITE);
line(320, 240, x_hour,y_hour);
/* 画分针*/
setlinestyle(PS_SOLID,NULL);
setcolor(LIGHTGRAY);
line(320, 240, x_min,y_min);
/*画秒针*/
setlinestyle(PS_SOLID,NULL);
setcolor(RED);
line(320, 240, x_sec,y_sec);
}
void main()
{
initgraph(640, 480); /* 初始化 640 x 480 的绘图窗口*/
/*绘制一个简单的表盘*/
circle(320, 240, 2);
circle(320, 240, 60);
circle(320, 240, 160);
outtextxy(296, 310,"BestAns");
/*设置 XOR 绘图模式*/
setwritemode(R2_XORPEN);/*设置 XOR 绘图模式*/
/*绘制表针*/
SYSTEMTIME ti; /* 定义变量保存当前时间*/
while(!kbhit()) /*按任意键退出钟表程序*/
{
GetLocalTime(&ti); /* 获取当前时间*/
Draw(ti.wHour,ti.wMinute, ti.wSecond); /* 画表针*/
Sleep(1000); /* 延时 1 秒*/
Draw(ti.wHour,ti.wMinute, ti.wSecond); /* 擦表针(擦表针和画表针的过程是一样的)*/
}
closegraph(); /*关闭绘图窗口*/
}
程序运行结果:
图9-9 运行效果图