关键词不能为空

当前您在: 主页 > 英语 >

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
1970-01-01 08:00
tags:

-

2021年1月23日发(作者:香车美人)

EasyX
指导手册

制作人:
jianxiawzx
一、基本概念

1.1
颜色

EasyX
使用
24bit
真彩色,不再支持调色板模式。

表示颜色有以下几种办法:

1.
用预定义颜色常量,如下:




B
LACK
B
LUE
000
0x00
GREEN
A800
CYAN
RED
MAGEN
TA
0xA8
A800
0x00
00A8
0xA8
00A8
BROWN
54A8
LIGHT
GRAY
A8A8
0x00
0xA8




0
0xA80





Y


UE
常量

DARKGRA
54
LIGHTBL
54
LIGHTGRE
EN
LIGHTCYA
N
0xFC54


0x54
FC54
0xFC
FC54
LIGHTRED
54FC

LIGHTMAG
ENTA
YELLOW
WHITE
54FC
0x54
FCFC
0xFC
FCFC
0x54







0xFC



绿





0x5454







绿










2.

16
进制的颜色表示,形式为:

0xb bggrr(bb=
蓝,
gg=
绿,
rr=

)
3.

RGB
宏合成颜色。详见
RGB


4.

HSLtoRGB

HSVtoRGB
转换其他色彩模型到
RGB
颜色。详见
HSLtoRGB

HSVtoRGB


示例:

以下是部分设置前景色的方法:

setcolor(0xff0000);
setcolor(BLUE);
setcolor(RGB(0,0,255));
setcolor(HSLtoRGB(240,1,0.5));
1.2
坐标


EasyX
中,坐标分两种:逻辑坐标和物理坐标。



逻辑坐标

逻辑坐标是在程序中用于绘图的坐标体系。

坐标默认的 原点在屏幕的左上角,
X
轴向右为正,
Y
轴向下为正,度量单位是象素。
坐标原点可以通过
setorigin()
函数修改;

坐标轴方向可以通过
setaspectratio()
函数修改;

缩放比例可以通过
setaspectratio()
函数修改。

在本手册中,凡是没有注明的坐标,均指逻辑坐标。

物理坐标

物理坐标是描述设备的坐标体系。

坐标原点在屏幕的左上角,
X
轴 向右为正,
Y
轴向下为正,度量单位是象素。

坐标原点、坐标轴方向、缩放比例都不能改变。

1.3
设备

所谓“设备”,简单来说,就是绘图表面。


EasyX
中,设备 分两种,一种是默认的绘图窗口,另一种是
IMAGE
对象。通过
SetWorkin gImage()
函数可以设置当前用于绘图的设备。

设置当前用于绘图的设备后,所有的绘图函数都会绘制在该设备上。

二、绘图函

2.1.1clearcliprgn
这个函数用于清空裁剪区的屏幕内容。

voidclearcliprgn();
2.1.2cleardevice
这个函数用于清除屏幕内容。
具体的,
是用当前背景色清空屏幕,
并将当前点移至
(0,0)


voidcleardevice();
2.1.3closegraph
这个函数用于关闭图形环境。

voidclosegraph();
2.1.4getaspectratio
这个函数用于获取当前缩放因子。

voidgetaspectratio(float*pxasp,float*pyasp); < br>参数:
pxasp
返回
x
方向上的缩放因子。
pyasp返回
y
方向上的缩放因子。

2.1.5GetHWnd
这个函数用于获取绘图窗口句柄。

HWNDGetHWnd();
Windows
下,句柄是一个窗口的标识,得到句柄后,可以使用
WindowsSDK
中的各种
命令实现对窗口的控制。

示例:

//
获得窗口句柄

HWNDhWnd=GetHWnd();


//
使用
API
函数修改窗口名称

SetWindowText(hWnd,
2.1.6graphdefaults
这个函数用于重置视图、当前点、绘图色、背景色、线形、填充类型、字体为默认值。

voidgraphdefaults();
2.1.7initgraph
这个函数用于初始化绘图环境。

HWNDinitgraph(intWidth, intHeight,intFlag=NULL);
参数:
Width
绘图环境的 宽度。
Height
绘图环境的高度。

Style
绘图环境的样式,默认为
NULL
。可为以下值:



SHOWCON
SOLE
含义

表示可以保留原控制台窗
口。

2.1.8setaspectratio
这个函数用于设置当前缩放因子。

voidsetaspectratio(floatxasp,floatyasp);
参数:

Xaspx
方向上的缩放因子。
例如绘制宽度为
1 00
的矩形,
实际的绘制宽度为
100*xasp


Ya spy
方向上的缩放因子。
例如绘制高度为
100
的矩形,
实际的绘 制高度为
100*yasp


说明:

如果缩放因子为负 ,可以实现坐标轴的翻转。例如,执行
setaspectratio(1,-1);
后,可使
y
轴向上为正。

2.1.9setcliprgn
这个函数用于设置当前绘图设备的裁剪区。

voidsetcliprgn(HRGNhrgn);
参数:
hrgn
区 域的句柄。创建区域所使用的坐标为物理坐标。如果该值为
NULL
,表示
取消之前设 置的裁剪区。

说明:

HRGN

Windows
定义的表示区域的句柄。将该区域设置为裁剪区后,任何区域外的绘
图都将无效(但仍然可以通过操作 显存在裁剪区外绘图)。

可以使用
WindowsGDI
函数创建一个区域 。例如,创建矩形区域可以使用函数:

HRGNCreateRectRgn(intlef t,inttop,intright,intbottom);
此外,
还可以使用函数CreateEllipticRgn
创建椭圆形的区域,
使用
CreatePo lygonRgn
创建多边形的区域等等。还可以使用
CombineRgn
组合区域 。更多关于区域的
GDI
函数,请
参考
MSDN
中的
Reg ionFunctions


注意:创建区域后,如果不再使用,请执行
D eleteObject(HRGNhrgn)
以释放该区域对
应的系统资源。



示例:

以下代码用于创建一个矩形裁剪区,并在该裁剪区内画圆,请观察裁剪效果:

#include
#include
voidmain()
{
//
初始化绘图窗口

initgraph(640,480);
//
创建一个矩形区域

HRGNrgn=CreateRectRgn(100,100,200,200);
//
将该矩形区域设置为裁剪区

setcliprgn(rgn);
//
不再使用
rgn
,清理
rgn
占用的系统资源

DeleteObject(rgn);
//
画圆,受裁剪区影响,只显示出四段圆弧

circle(150,150,55);
//
取消之前设置的裁剪区

setcliprgn(NULL);
//
画圆,不再受裁剪区影响,显示出一个完整的圆

circle(150,150,60);
//
按任意键退出

getch();
closegraph();
}
2.1.10setorigin
这个函数用于设置坐标原点。

voidsetorigin(intx,inty);
x
原点的
x
坐标(使用物理坐标)。
y
原点的
y
坐标(使用物理坐标)。

2.2
颜色表示及相关函数

2.2.1
相关函数和数据如下:

函数或
数据

getbkc
olor
getcol
or
GetBVa

描述

获取当前绘图背景色。

获取当前绘图前景色

返回指定颜色中的蓝色值。


lue
GetGVa
lue
GetRVa
lue
HSLtoR
GB
HSVtoR
GB
RGB
RGBtoG
RAY
RGBtoH
SL
RGBtoH
SV
setbkc
olor
setcol
or
BGR

2.2.2BGR
BGR
宏用于交换颜色中的红色和蓝色。

COLORREFBGR(COLORREFcolor);
参数:
color
需要交换红色和蓝色的颜色。

返回值:

返回交换红色和蓝色后的颜色。

说明:

颜色在内存中的表示形式 为:
0xbbggrr(bb=
蓝,
gg=
绿,
rr=
红< br>)
,但是显存中的颜色表
现形式为
0xrrggbb
。注意,两者的红 色和蓝色是相反的。直接操作显存时,可以通过
BGR
宏交换颜色的红色和蓝色部分。

2.2.3getbkcolor
这个函数用于获取当前绘图背景色。

COLORREFgetbkcolor();
2.2.4GetBValue

返回指定颜色中的绿色值。

返回指定颜色中的红色值。

转换
HSL
颜色为
RGB
颜色。

转换
HSV
颜色为
RGB
颜色。

通过红、绿、蓝颜色分量合成颜
色。

转换
RGB
颜色为灰度颜色。

转换
RGB
颜色为
HSL
颜色。

转换
RGB
颜色为
HSV
颜色。

设置当前绘图背景色。

设置当前绘图前景色。

交换颜色中的红色和蓝色。


GetBValue
宏用于返回指定颜色中的蓝色值。

BYTEGetBValue(COLORREFrgb);
参数:
rgb
指定的颜色。

返回值:

指定颜色中的蓝色值,值的范围
0~255


说明:

GetBValue
宏在
WindowsSDK
中定义。

2.2.5getcolor
这个函数用于获取当前绘图前景色

COLORREFgetcolor();
2.2.6GetGValue
GetGValue
宏用于返回指定颜色中的绿色值。

BYTEGetGValue(COLORREFrgb);
参数:
rgb
指定的颜色。

返回值:

指定颜色中的绿色值,值的范围
0~255


说明:

GetGValue
宏在
WindowsSDK
中定义。

2.2.7GetRValue
GetRValue
宏用于返回指定颜色中的红色值。

BYTEGetRValue(COLORREFrgb);
参数:
rgb
指定的颜色。

返回值:

指定颜色中的红色值,值的范围
0~255


说明:

GetRValue
宏在
WindowsSDK
中定义。

2.2.8HSLtoRGB
该函数用于转换
HSL
颜色为
RGB
颜色。

COLORREFHSLtoRGB(floatH,floatS,floatL);
参数:

H

HSL
颜色模型的
Hue(
色相
)
分量,
0<=H<360


S

HSL
颜色模型的
Saturation(
饱和度
)
分量,
0<=S<=1


L

HSL
颜色模型的
Lig htness(
亮度
)
分量,
0<=L<=1


返回值:

对应的
RGB
颜色。

说明:

HSL
又称
HLS


HSL
的颜色模型如图所示:



H
是英文Hue
的首字母,表示色相,即组成可见光谱的单色。红色在
0
度,绿色在
120
度,蓝色在
240
度,以此方向过渡。

S
是英文
Saturation
的首字母,表示饱和度,等于
0
时为灰色。在最大饱和 度
1
时,
具有最纯的色光。

L
是英文
Light ness
的首字母,
表示亮度,
等于
0
时为黑色,
等于0.5
时是色彩最鲜明
的状态,等于
1
时为白色。

示例:

请参见示例程序中的“彩虹”。

2.2.9HSVtoRGB
该函数用于转换
HSV
颜色为
RGB
颜色。

COLORREFHSVtoRGB(floatH,floatS,floatV);
参数:

H

HSV
颜色模型的
Hue(
色相
)
分量,
0<=H<360


S

HSV
颜色模型的
Saturation(
饱和度
)
分量,
0<=S<=1


V

HSV
颜色模型的
Val ue(
明度
)
分量,
0<=V<=1


返回值:

对应的
RGB
颜色。

说明:

HSV
又称
HSB


HSV
的颜色模型如图所示:

H
是英文
Hue
的 首字母,表示色相,即组成可见光谱的单色。红色在
0
度,绿色在
120
度, 蓝色在
240
度,以此方向过渡。

S
是英文
Satura tion
的首字母,表示饱和度,等于
0
时为灰色。在最大饱和度
1
时,
每一色相具有最纯的色光。

V
是英文
Value
的首 字母,表示明度,等于
0
时为黑色,在最大明度
1
时,是色彩最鲜
明 的状态。

示例:

HSV
颜色模型类似于
HSL
,示例程序中的“彩虹”是
HSL
模型的操作范例,可以参考。

2.2.10RGB
RGB
宏用于通过红、绿、蓝颜色分量合成颜色。

COLORREFRGB(
BYTEbyRed,//
颜色的红色部分

BYTEbyGreen,//
颜色的绿色部分

BYTEbyBlue//
颜色的蓝色部分

);
参数:

byRed
颜色的红色部分,取值范围:
0~255


byGreen
颜色的绿色部分,取值范围:
0~255




byBlue
颜色的蓝色部分,取值范围:
0~255


返回值:

返回合成的颜色。

说明:

可以通过
GetRValue

GetGValue

GetBValue< br>宏从颜色中分离出红、
绿、
蓝颜色分量。

注:

RGB
宏在
WindowsSDK
中定义。

2.2.11RGBtoGRAY
该函数用于返回与指定颜色对应的灰度值颜色。

COLORREFRGBtoGRAY(COLORREFrgb);
参数:

rgb

RGB
颜色。

2.2.12RGBtoHSL
该函数用于转换
RGB
颜色为
HSL
颜色。

vo idRGBtoHSL(COLORREFrgb,float*H,float*S,float*L);
参数:

rgb

RGB
颜色。

H用于返回
HSL
颜色模型的
Hue(
色相
)
分量,0<=H<360


S
用于返回
HSL
颜色模型的< br>Saturation(
饱和度
)
分量,
0<=S<=1
。< br>
L
用于返回
HSL
颜色模型的
Lightness(
亮度
)
分量,
0<=L<=1


说明:

HSL
详见
HSLtoRGB


2.2.13RGBtoHSV
该函数用于转换
RGB
颜色为
HSV
颜色。

vo idRGBtoHSV(COLORREFrgb,float*H,float*S,float*V);
参数:

rgb

RGB
颜色。

H用于返回
HSV
颜色模型的
Hue(
色相
)
分量,0<=H<360


S
用于返回
HSV
颜色模型的< br>Saturation(
饱和度
)
分量,
0<=S<=1
。< br>
V
用于返回
HSV
颜色模型的
Value(
明度< br>)
分量,
0<=V<=1


2.2.14setbkcolor
这个函数用于设置当前绘图背景色。

voidsetbkcolor(COLORREFcolor);
参数:
color
指定要设置的背景颜色。

说明:
“背景色”
是调色板绘图模式下的概念,
所谓的背景色,
是调色板中编号为
0
的颜色,
可以通过修改编号
0
的颜色达到随时修改背景色的目的。在调色 板模式下,显存中保存的
是每种颜色在调色板中的编号。在
EasyX
中,已经废弃了 调色板模式。



真彩色绘图模式下没有调色板,显存中直接保存每个点的颜色,没有背景色的概念。

EasyX
采用真彩色绘图模式,同时使用背景色,目的有两个:

1.
当文字背景不是透明时,指定文字的背景色。

2.
执行
cleardevice()

clearcliprgn()
时,使用该颜色清空 屏幕或裁剪区。

示例:

以下示例实现在蓝色背景下绘制红色的矩形:

#include
#include
voidmain()
{
//
初始化绘图窗口

initgraph(640,480);
//
设置背景色为蓝色

setbkcolor(BLUE);
//
用背景色清空屏幕

cleardevice();
//
设置绘图色为红色

setcolor(RED);
//
画矩形

rectangle(100,100,300,300);
//
按任意键退出

getch();
closegraph();
}
2.2.15setcolor
这个函数用于设置当前绘图前景色。

voidsetcolor(COLORREFcolor);
参数:
color
要设置的前景颜色。

2.3
绘制图形相关函数

2
2.3.2arc
这个函数用于画椭圆弧。

voidarc(intleft,inttop,int right,intbottom,doublestangle,doubleendangle);
参数:

left
圆弧所在椭圆的外切矩形的左上角
x
坐标。

top
圆弧所在椭圆的外切矩形的左上角
y
坐标。

right
圆弧所在椭圆的外切矩形的右下角
x
坐标。

bottom
圆弧所在椭圆的外切矩形的右下角
y
坐标。



stangle
圆弧的起始角的弧度。

endangle
圆弧的终止角的弧度。

2.3.3bar
这个函数用于画无边框填充矩形。

voidbar(intleft,inttop,intright,intbottom);
参数:

left
矩形左部
x
坐标。

top
矩形上部
y
坐标。

right
矩形右部
x
坐标。

bottom
矩形下部
y
坐标。

2.3.4bar3d
这个函数用于画有边框三维填充矩形。

voidbar3d(intleft,in ttop,intright,intbottom,intdepth,booltopflag);
参数:

left
矩形左部
x
坐标。

top
矩形上部
y
坐标。

right
矩形右部
x
坐标。

bottom
矩形下部
y
坐标。

depth
矩形深度。

topflag

false时,将不画矩形的三维顶部。该选项可用来画堆叠的三维矩形。

2.3.5circle
这个函数用于画圆。

voidcircle(intx,inty,intradius);
参数:

x
圆的圆心
x
坐标。

y
圆的圆心
y
坐标。

radius
圆的半径。

2.3.6drawpoly
这个函数用于画多边形。

voiddrawpoly(intnumpoints, constint*polypoints);
参数:

numpoints
多边形点的个数。

polypoints
每个 点的坐标,数组元素个数为
numpoints*2


该函数并不会自动连 接多边形首尾。如果需要画封闭的多边形,请将最后一个点设置为与
第一点相同。

以下局部代码绘制一个封闭的三角形:

intpoints[]={50,200,200,200,200,50,50,200};
drawpoly(4,points);


2.3.7ellipse
这个函数用于画椭圆。

voidellipse(intleft,inttop, intright,intbottom);
参数:

left
椭圆外切矩形的左上角
x
坐标。

top
椭圆外切矩形的左上角
y
坐标。

right
椭圆外切矩形的右下角
x
坐标。

bottom
椭圆外切矩形的右下角
y
坐标。

说明:

由于屏幕像素点坐标是整数,因此用圆心和半径描述的椭圆无法处理直径为偶 数的情
况。而该函数的参数采用外切矩形来描述椭圆,可以解决这个问题。

当外切矩形为正方形时,可以绘制圆。

2.3.8fillcircle
这个函数用于画填充圆。

voidfillcircle(intx,inty,intradius);
参数:

x
圆心的
x
坐标。

y
圆心的
y
坐标。

radius
圆的半径。

说明:

该函数使用当前线形和当前填充样式绘制有外框的填充圆。

2.3.9fillellipse
这个函数用于画填充的椭圆。

voi dfillellipse(intleft,inttop,intright,intbottom);
参数:

left
椭圆外切矩形的左上角
x
坐标。

top
椭圆外切矩形的左上角
y
坐标。

right
椭圆外切矩形的右下角
x
坐标。

bottom
椭圆外切矩形的右下角
y
坐标。

说明:

该函数使用当前线形和当前填充样式绘制有外框的填充椭圆。
由于屏幕像素点坐标是整数,因此用圆心和半径描述的椭圆无法处理直径为偶数的情
况。而该函数的 参数采用外切矩形来描述椭圆,可以解决这个问题。

当外切矩形为正方形时,可以绘制填充圆。

2.3.10fillpoly
这个函数用于画填充的多边形。

voidfillpoly(intnumpoin ts,constint*polypoints);
参数:



numpoints
多边形点的个数。

polypoints
每个 点的坐标,数组元素个数为
numpoints*2
。该函数会自动连接多边形
首尾。

说明:

该函数使用当前线形和当前填充样式绘制有外框的填充多边形。

示例:

以下局部代码绘制一个封闭的填充三角形:

intpoints[]={50,200,200,200,200,50};
fillpoly(3,points);
2.3.11floodfill
这个函数用于填充区域。

voidfloodfill(intx,inty,COLORREFborder)
参数:

x
待填充区域内任意点的
x
坐标。

y
待填充区域内任意点的
y
坐标。

border
待填充区域的边界颜色。填充动作在该颜色围成的封闭区域内填充。

说明:

填充动作以
(x,y)
为起点,
向周围扩散,直到遇到
border
指定的颜色才会终止。
所以,
指定的区域必须是封 闭的。

填充的颜色和样式可以使用
setfillstyle
函数指定。

2.3.12getfillstyle
这个函数用于获取当前填充类型。

voidgetfillstyle(COLORREF*pcolor,int*ppattern=NUL L,char*pupattern=NULL);
参数:

pcolor
返回当前填充色。

ppattern
返回当前填充图 案。详见
setfillstyle


pupattern
指向< br>char[8]
的指针,如果该指针不为空,且当前填充图案为
USER_FILL
返回当前的自定义填充样式。

2.3.13getheight
这个函数用于获取绘图区高度。

intgetheight();
2.3.14getlinestyle
这个函数用于获取当前线形。

v oidgetlinestyle(int*plinestyle,WORD*pupattern=NULL ,int*pthickness=NULL);
参数:

plinestyle< br>返回当前线型。详见
setlinestyle


pupattern
返回当前自定义线形数据。

pthickness
返回当前线形宽度。



2.3.15getpixel
这个函数用于获取点的颜色。

COLORREFgetpixel(intx,inty);
参数:

x
要获取颜色的
x
坐标。

y
要获取颜色的
y
坐标。

2.3.16getwidth
该函数用于获取绘图区宽度。

intgetwidth();
2.3.17getx
这个函数用于获取当前
x
坐标。

intgetx();
2.3.18gety
这个函数用于获取当前
y
坐标。

intgety();
2.3.19line
这个函数用于画线。还可以用
linerel
lineto
画线。

voidline(intx1,inty1,intx2,inty2);
参数:

x1
线的起始点的
x
坐标。

y1
线的起始点的
y
坐标。

x2
线的终止点的
x
坐标。

y2
线的终止点的
y
坐标。

2.3.20linerel
这个函数用于画线。还可以用
line

lineto
画线。

voidlinerel(intdx,intdy);
参数:

dx
从“当前点”开始画线,沿
x
轴偏移
dx


dy
从“当前点”开始画线,沿
y
轴偏移
dy


2.3.21lineto
这个函数用于画线。还可以用
line

linerel
画线。

voidlineto(intx,inty);
参数:

x
目标点的
x
坐标(从“当前点”开始画线)。

y
目标点的
y
坐标(从“当前点”开始画线)。

2.3.22moverel
这个函数用于移动当前点。有些绘图操作会从“当前点”开始, 这个函数可以设置该
点。还可以用
moveto
设置当前点。



voidmoverel(intdx,intdy);
参数:

dx
将当前点沿
x
轴移动
dx


dy
将当前点沿
y
轴移动
dy


2.3.23moveto
这个函数用于移动当前点。有些绘图操作会从“当前点”开始,这 个函数可以设置该
点。还可以用
moverel
设置当前点。

voidmoveto(intx,inty);
参数:

x
新的当前点
x
坐标。

y
新的当前点
y
坐标。

2.3.24pie
这个函数用于画填充椭圆扇形。

voidpie(intleft,inttop, intright,intbottom,doublestangle,doubleendangle);
参数:

left
扇形所在椭圆的外切矩形的左上角
x
坐标。

top
扇形所在椭圆的外切矩形的左上角
y
坐标。

right
扇形所在椭圆的外切矩形的右下角
x
坐标。

bottom
扇形所在椭圆的外切矩形的右下角
y
坐标。

stangle
椭圆扇形的起始角的弧度。

endangle
椭圆扇形的终止角的弧度。

2.3.25putpixel
这个函数用于画点。

voidputpixel(intx,inty,COLORREFcolor);
参数:

x
点的
x
坐标。

y
点的
y
坐标。

color
点的颜色。

2.3.26rectangle
这个函数用于画空心矩形。

voidr ectangle(intleft,inttop,intright,intbottom);
参数:

left
矩形左部
x
坐标。

top
矩形上部
y
坐标。

right
矩形右部
x
坐标。

bottom
矩形下部
y
坐标。

2.3.27setfillstyle
这个函数用于设置当前填充类型。



voidsetfillstyle(COLORREFcolor,intpa ttern=SOLID_FILL,constchar*pupattern=N
ULL);
参数:

color
填充颜色。

pattern
填充类型,可以是以下宏或值:



NULL_FILL
SOLID_FILL
BDIAGONAL_FI
LL
CROSS_FILL
DIAGCROSS_FI
LL
DOT_FILL
FDIAGONAL_FI
LL
HORIZONTAL_F
ILL
VERTICAL_FIL
L
BDIAGONAL2_F
ILL
CROSS2_FILL
DIAGCROSS2_F
ILL
DOT2_FILL
FDIAGONAL2_F
ILL
HORIZONTAL2_
FILL
VERTICAL2_FI
LL
BDIAGONAL3_F
ILL

含义

不填充

固实填充








0
1
2
3
4
5
6
7









CROSS3_FILL
DIAGCROSS3_F
ILL
DOT3_FILL
FDIAGONAL3_F
ILL
HORIZONTAL3_
FILL
VERTICAL3_FI
LL
INTERLEAVE_F
ILL
8
9
0
1
2
3
4







指定图案填充。详见
pupattern

PATTERN_FILL
5
数。

pupattern
指定图案填充时的样式,仅当pattern

PATTERN_FILL
时有效。该指针指向
cha r[8]
数组,该数组表示
8x8
的填充样式。具体的,每个数组元素表示一行的样式 ,每个
char

素有
8
位,
按位从高到低表示从左到右,
每个位表示一个点的状态,
由此组成
8x8
的区域。

示例:

设置蓝色固实填充:

setfillstyle(BLUE);
设置红色斜线填充:

setfillstyle(RED,LTSLASH_FILL);
设置黄色的自定义的填充样式(圆形图案填充):

setfillstyle(YE LLOW,PATTERN_FILL,
设置绿色的自定义的填充样式(细斜线夹粗斜线图案填充):< br>
setfillstyle(GREEN,PATTERN_FILL,
2.3.28 setlinestyle
这个函数用于设置当前线形。

voidsetline style(intlinestyle,WORDupattern=NULL,intthickness= 1);
参数:

linestyle
线型,可以是以下值:



PS_SOLID
PS_DASH

含义

线形为实线。

线形为:
------------

PS_DOT
PS_DASHDO
T
PS_DASHDO
TDOT
PS_NULL
PS_USERST
YLE



线形为:············

线形为:
-
·
-·
-
·
-
·
-
·
-
·
线形为:
-
··
-
··
-
··
-
··

线形为不可见。

线形样式是自定义的,依赖于
upattern

数。

upattern
自定义线形数据。

自定义规则:该数据为
WOR D
类型,共
16
个二进制位,每位为
1
表示画线,为
0表示
空白。从低位到高位表示从起始到终止的方向。

仅当线型为
PS_USERSTYLE
时该参数有效。

thickness
线形宽度。

示例:

设置线形为点划线:
setlinestyle(PS_DASHDOT);
设置线 形为宽度
3
像素的虚线:
setlinestyle(PS_DASH,NULL,3 );
2.3.29setwritemode
这个函数用于设置绘图位操作模式。

voidsetwritemode(intmode);
参数:

mod e
二元光栅操作码
(即位操作模式)

支持全部的
16
种二 元光栅操作码,
罗列如下:

位操作模式

R2_BLACK
R2_COPYPEN
R2_MASKNOT
PEN
R2_MASKPEN
NOT
R2_MERGENO
TPEN
R2_MERGEPE
N

描述

绘制出的像素颜色
=
黑色

绘制出的像素颜色
=
当前颜色(默认)

绘制出的像素颜色
=
屏幕颜色
AND(NOT
当前
颜色
)
R2_MASKPEN
绘制出的像素颜色
=
屏幕颜色
AND
当前颜色

绘 制出的像素颜色
=(NOT
屏幕颜色
)AND
当前
颜色
< br>绘制出的像素颜色
=
屏幕颜色
OR(NOT
当前颜

)
绘制出的像素颜色
=
屏幕颜色
OR
当前颜色


R2_MERGEPE
NNOT
R2_NOP
R2_NOT
R2_NOTCOPY
PEN
R2_NOTMASK
PEN
R2_NOTMERG
EPEN
R2_NOTXORP
EN
R2_WHITE
R2_XORPEN

注:


)
绘制出的像素颜色
=(NOT
屏幕颜色
)OR
当前
颜色

绘制出的像素颜色
=
屏幕颜色

绘制出的像素颜色
=NOT
屏幕颜色

绘制出的像素颜色
=NOT
当前颜色

绘制出的像素颜色
= NOT(
屏幕颜色
AND
当前
颜色
)
绘制出的像素颜色< br>=NOT(
屏幕颜色
OR
当前颜
绘制出的像素颜色
=NOT(
屏幕颜色
XOR
当前
颜色
)
绘制出的像素颜色
=
白色

绘制出的像素颜色
=
屏幕颜色
XOR
当前颜色

/OR/NOT/XOR
为布尔运算。

2.
屏幕颜色

指绘制所经过的屏幕像素点的颜色。

3.< br>当前颜色

是指通过
setcolor
设置的用于当前绘制的颜色。
2.4
文字输出相关函数

2.4.1
相关函数和数据如下:

函数或
数据

getfon
t
LOGFON
T
outtex
t
outtex
txy
drawte
xt
setbkm
ode
setfon

描述

获取当前字体样式。

保存字体样式的结构体。

在当前位置输出字符串。

在指定位置输出字符串。

在指定区域内以指定格式输出字
符串。

设置输出文字时的背景模式。

设置当前字体样式。


t
texthe
ight
textwi
dth

2.4.2drawtext
这个函数用于在指定区域内以指定格式输出字符串。

intdrawtext(LPCTSTRstr,RECT*pRect,UINTuFormat) ;
intdrawtext(TCHARc,RECT*pRect,UINTuFormat);
参数:

str
待输出的字符串。

pRect
指 定的矩形区域的指针。
某些
uFormat
标志会使用这个矩形区域做返回值。
详见
后文说明。

uFormat
指定格式化输出文字的方法。详见后文说明。

C
待输出的字符。

返回值:

函数执行成功时,返回文字的高度。

如果指定了
DT_VCENTER
DT_BOTTOM
标志,返回值表示从
pRect->top
到输出 文字的
底部的偏移量。

如果函数执行失败,返回
0


说明:

注:下文关于文字位置的描述,均是相对于
pRect
指向的矩形而言。

标志

DT_BOTTOM
描述

调整文字位置到矩形底 部,
仅当和
DT_SINGLELINE
一起使用
时有效。

检测矩形的宽高。如果有多行文字,
drawtext
使用
pRect
指定 的宽度,
并且扩展矩形的底部以容纳每一行文字。
如果只有
DT_CALCRECT
一行文字,
drawtext
修改
pRect
的右边以容纳最后一个 文字。
无论哪种情况,
drawtext
都返回格式化后的文字高度,并且不
输出文字。

DT_CENTER
DT_EDITCONTROL
文字水平居中。

以单行编辑的方式复制可见文本。
具体的说,
就是 以字符的
平均宽度为计算依据,
同时用这个方式应用于编辑控制,
并且这
种方 式不显示可见部分的最后一行。

DT_END_ELLIPSIS

获取字符串实际占用的像素高度。

获取字符串实际占用的像素宽度。
对于文本显示,
如果字符串的末字符不在矩形内,
它会被截
断并以省略号标识。< br>如果是一个单词而不是一个字符,
其末尾超

出了矩形范围,它不会被截断。

字符串不会被修改,除非指定了
DT_MODIFYSTRING
标志。
< br>展开
TAB
符号。默认每个
TAB

8
个字符位置。 注意,
DT_EXPANDTABS
DT_WORD_ELLIPSIS

DT_PATH_ELLIPSIS

DT_END_ELLIPSIS

能 和
DT_EXPANDTABS
一起用。

DT_EXTERNALLEADING
在行高里包含字体的行间距。
通常情况下,
行间距不被包含
在正文的行高里。

Windows2000/XP:
忽略文字中的前缀字符
(&)

并且前缀字符
后面的字符不会出现下划线。 其他前缀字符仍会被处理。例如:

DT_HIDEPREFIX
输入字符串
:
通常输出
:
DTDT_HIDEPREFIX:
DT_INTERNAL
DT_LEFT
DT_MODIFYSTRING
DT_NOCLIP
使用系统字体计算文字的宽高等属性。

文字左对齐。

修改指定字 符串为显示出的正文。仅当和
DT_END_ELLIPSIS

DT_PATH_E LLIPSIS
标志同时使用时有效。

使输出文字不受
pRect
裁剪限制。使用
DT_NOCLIP
会使
drawtext
执行稍快一些。< br>
Windows2000/XP:
防止换行符插入到
DT_NOFULLWI DTHCHARB
REAK
DBCS(double-widecharacterstri ng

即宽字符串
)

换行规则相
当于
SBCS< br>字符串。
仅当和
DT_WORDBREAK
一起使用时有效。
例如,< br>汉字就是宽字符,
设置该标志后,
连续的汉字会像英文单词一样
不被换行符中断 。

关闭前缀字符的处理。通常,
DrawText
解释前缀转义符
&

其后的字符加下划线,解释
&&
为显示单个
&
。指定< br>DT_NOPREFIX

DT_NOPREFIX
这种处理被关闭。例如:

输入字符串
:
通常输出
:
DT_NOPREFIX:
对于显示的文字,
用省略号替换字符串中间的字符以便容纳
DT_PATH_ELLIPSIS
于矩形内。如果字符串包含反斜杠
()
DT_PATH_ELLIPSIS
尽可
能的保留最后一个反斜杠后面的文字。

字符串不会被修改,除非指定了
DT_MODIFYSTRING
标志。
< br>Windows2000/XP:
仅仅在
(&)
前缀字符的位置下绘制一个下< br>DT_PREFIXONLY
划线。不绘制字符串中的任何其他字符。例如:

输入字符串
:
通常输出
:


DT_PREFIXONLY:
DT_RIGHT
DT_RTLREADING
DT_SINGLELINE
文字右对齐。

设置从右向左的阅读顺序(当 文字是希伯来文或阿拉伯文
时)。默认的阅读顺序是从左向右。

使文字显示在一行。回车和换行符都无效。

设置
TAB
制表位。< br>uFormat

15

8
位指定
TAB
的 字符宽度。
DT_TABSTOP
默认
TAB
表示
8
个字 符宽度。注意,
DT_CALCRECT

DT_EXTERNALLEADING< br>、
DT_INTERNAL

DT_NOCLIP

DT_N OPREFIX
不能和
DT_TABSTOP
一起用。

DT_TOP
DT_VCENTER
DT_WORDBREAK
DT_WORD_ELLIPSIS
示例:

以下范例在屏幕中央输出字符串“
HelloWorld
”:

#include
#include
voidmain()
{
//
绘图环境初始化

initgraph(640,480);
//
在屏幕中央输出字符串

RECTr={0,0,640,480};
drawtext(
//
按任意键退出

getch();
closegraph();
}
2.4.3getfont
这个函数用于获取当前字体样式。

voidgetfont(LOGFONT*font);
参数:

font
指向
LOGFONT
结构体的指针。

2.4.4LOGFONT
这个结构体定义了字体的属性。

struct LOGFONT{LONGlfHeight;LONGlfWidth,LONGlfEscapement; LONGlfOrientati,

文字顶部对齐。

文字垂直居中。仅当和
DT_SINGLELINE
一起使用时有效。
自动换行。当文字超过右边界时会自动换行
(
不拆开单词
)

回 车符同样可以换行。

截去无法容纳的文字,并在末尾增加省略号。

LONGlfWeight;BYTElfItalic;BYTElfUnderline,BYTElf StrikeOut;
BYTElfCharSet;BYTElfOutPrecision;BY TElfClipPrecision;
BYTElfQuality,BYTElfPitchAndFamily;
TCHARlfFaceName[LF_FACESIZE];};
成员

lfHeight
指定高度(逻辑单位)。

lfWidth
指定字 符的平均宽度(逻辑单位)。如果为
0
,则比例自适应。

lfEscape ment
字符串的书写角度,单位
0.1
度,默认为
0


lfOrientation
每个字符的书写角度,单位
0.1
度,默认为< br>0


lfWeight
字符的笔画粗细,范围
0~1000

0
表示默认粗细,使用数字或下表中定义的
宏均可。



FW_DONTCA
RE
FW_THIN
FW_EXTRAL
IGHT
FW_ULTRAL
IGHT
FW_LIGHT
00
3
00
4
4
00
FW_MEDIUM
00
FW_SEMIBO
LD
FW_DEMIBO
LD
FW_BOLD
FW_EXTRAB
OLD


细值

0
1
00
2
00
2
FW_NORMAL
00
FW_REGULA
R
5
6
00
6
00
7
00
8
00

FW_ULTRAB
OLD
FW_HEAVY
FW_BLACK

00
8
9
00
9
00
lfItalic
指定字体是否是斜体。

lfUnderline
指定字体是否有下划线。

lfStrikeOut
指定字体是否有删除线。

lfCharSet
指定字符集。可以使用以下预定义的值:

ANSI_CHARSET
BALTIC_CHARSET
CHINESEBIG5_CHARSET
DEFAULT_CHARSET
EASTEUROPE_CHARSET
GB2312_CHARSET
GREEK_CHARSET
HANGUL_CHARSET
MAC_CHARSET
OEM_CHARSET
RUSSIAN_CHARSET
SHIFTJIS_CHARSET
SYMBOL_CHARSET
TURKISH_CHARSET
其中,
OEM_CHARSET
表示字符集依赖本地操作系统。

D EFAULT_CHARSET
表示字符集基于本地操作系统。例如,系统位置是
Englis h(UnitedStates)
,字符集将设置为
ANSI_CHARSET

lfOutPrecision
指定文字的输出精度。
输出精度定义输出与所请 求的字体高度、
宽度、
字符方向、行距、间距和字体类型相匹配必须达到的匹配程度。可以是以 下值:



OUT_DEFAULT_PR
ECIS
OUT_DEVICE_PRE
CIS
OUT_OUTLINE_PR
ECIS

含义

指定默认的映射行为。

当系统包含多个名称相同的字体时,指定设备字体。

指定字体映射选择
TrueType
和其它的
outline- based
字体。


OUT_RASTER_PRE
CIS
OUT_STRING_PRE
CIS
OUT_STROKE_PRE
CIS
OUT_TT_ONLY_PR
ECIS
OUT_TT_PRECIS
当系统包含多个名称相同的字体时,
指定光栅字体
(即点阵字体)


这个值并不能用于指定字体映射,只是指定点阵字体枚举数据。

这个值并不能用于指 定字体映射,只是指定
TrueType
和其他的
outline- based
字体,以及矢量字体的枚举数据。

指定字体映射只选择
True Type
字体。如果系统中没有安装
TrueType
字体,将选择默认操作。

当系统包含多个名称相同的字体时,指定
TrueType
字体。
lfClipPrecision
指定文字的剪辑精度。
剪辑精度定义如何剪辑字符的一部 分位于剪辑
区域之外的字符。可以是以下值:



CLIP_DEFAULT_PR
ECIS
CLIP_STROKE_PRE
CIS
CLIP_EMBEDDED
含义

指定默认的剪辑行为。

这个值并不能用于指定字体映射,只 是指定光栅(即点阵)、矢
量或
TrueType
字体的枚举数据。

当使用内嵌的只读字体时,必须指定这个标志。

如果指定了该值,
所有字体 的旋转都依赖于坐标系统的方向是逆
时针或顺时针。

CLIP_LH_ANGLES
如果没有指定该值,
设备字体始终逆时针旋转,
但是其它字体的旋转
依赖于坐 标系统的方向。

该设置影响
lfOrientation
参数的效果。

lfQua lity
指定文字的输出质量。输出质量定义图形设备界面
(GDI)
必须尝试将逻辑 字
体属性与实际物理字体的字体属性进行匹配的仔细程度。可以是以下值:



ANTIALIASED_QUALIT
Y
DEFAULT_QUALITY
含义

指定输出质量是抗锯齿的(如果字体支持)。

指定输出质量不重要。

草稿质量。字体的显示质量是不重要的。对于光栅字体(即
DRAFT_QUALITY 点阵字体),缩放是有效的,这就意味着可以使用更多的尺寸,
但是显示质量并不高。如果需要,粗 体、斜体、下划线和删除线
字体会被合成。

NONANTIALIASED_QUA
LITY
PROOF_QUALITY

指定输出质量不是抗锯齿的。

正稿质量。指定字体质量比匹配字体属性更 重要。对于光栅
字体(即点阵字体),缩放是无效的,会选用其最接近的字体大

小。 虽然选中
PROOF_QUALITY
时字体大小不能精确地映射,但是
输出质量很高 ,并且不会有畸变现象。如果需要,粗体、斜体、
下划线和删除线字体会被合成。

如 果
ANTIALIASED_QUALITY

NONANTIALIASED_QU ALITY
都未被选择,
抗锯齿效果将依
赖于控制面板中字体抗锯齿的设置。

lfPitchAndFamily
指定以常规方式描述字体的字体系列。字体系列描述大致的 字体外
观。字体系列用于在所需精确字体不可用时指定字体。

1~2
位指定字体间距,可以是以下值:



含义

TCH
指定默认间
DEFAULT_PI
距。

FIXED_PITC
H
VARIABLE_P
ITCH


FF_DECORA
TIVE
FF_DONTCA
RE
指定固定间距。

指定可变间距。

4~7
位指定字体系列,可以是以下值:

含义

指定特殊字体。例如
OldEnglish


指定字体系列不重要。

指定具有或不具有衬线的等宽字体。例如,
Pica

Elite

CourierNew
指定具有衬线的等比字体。例 如
MSSerif


指定设计为类似手写体的字体。例如
Scri pt

Cursive


指定不具有衬线的等比字体。例如
MSSansSerif


FF_MODERN
都是等宽字体。

FF_ROMAN
FF_SCRIPT
FF_SWISS
字体间距和字体系列可以用布尔运算符OR
连接
(
即符号
|)


lfFaceNa me
字体名称,
名称不得超过
31
个字符。
如果是空字符串,
系统将使用第一个
满足其它属性的字体。

2.4.5outtext
这个函数用于在当前位置输出字符串。

voidouttext(LPCTSTRstr);
voidouttext(TCHARc);
参数:

str
待输出的字符串的指针。

c
待输出的字符。

说明:



该函数会改变当前位置至字符串末尾。所以,可以连续 使用该函数使输出的字符串保
持连续。

示例:

//
输出字符串

chars[]=
outtext(s);
//
输出字符

charc='A';
outtext(c);
//
输出数值,先将数字格式化输出为字符串

chars[5];
sprintf(s,
outtext(s);
2.4.6outtextxy
这个函数用于在指定位置输出字符串。

voidouttextxy(intx,inty,LPCTSTRstr);
voidouttextxy(intx,inty,TCHARc);
参数:

x
字符串输出时头字母的
x
轴的坐标值

y
字符串输出时头字母的
y
轴的坐标值。

str
待输出的字符串的指针。

c
待输出的字符。

说明:

该函数不会改变当前位置。

示例:

//
输出字符串

chars[]=
outtextxy(10,20,s);
//
输出字符

charc='A';
outtextxy(10,40,c);
//
输出数值,先将数字格式化输出为字符串

chars[5];
sprintf(s,
outtextxy(10,60,s);
2.4.7setbkmode
这个函数用于设置输出文字时的背景模式。

voidsetbkmode(intiBkMode);

-


-


-


-


-


-


-


-



本文更新与1970-01-01 08:00,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/555315.html
    上一篇:没有了
    下一篇:没有了

的相关文章