版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、EasyX指导手册制作人:jianxiawzx一、基本概念1.1颜色EasyX使用24bit真彩色,不再支持调色板模式。表示颜色有以下几种办法:1.用预定义颜色常量,如下:常量值颜色常量值颜色BLACK0黑DARKGRAY0x545454深灰BLUE0xA80000蓝LIGHTBLUE0xFC5454亮蓝GREEN0x00A800绿LIGHTGREEN0x54FC54亮绿CYAN0xA8A800青LIGHTCYAN0xFCFC54亮青RED0x0000A8红LIGHTRED0x5454FC亮红MAGENTA0xA800A8紫LIGHTMAGENTA0xFC54FC亮紫BROWN0x0054A8
2、棕YELLOW0x54FCFC黄LIGHTGRAY0xA8A8A8浅灰WHITE0xFCFCFC白2.用16进制的颜色表示,形式为:0xbbggrr(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中,坐标分两种:逻辑坐标和物理坐标。逻辑坐标逻辑
3、坐标是在程序中用于绘图的坐标体系。坐标默认的原点在屏幕的左上角,X轴向右为正,Y轴向下为正,度量单位是象素。坐标原点可以通过setorigin()函数修改;坐标轴方向可以通过setaspectratio()函数修改;缩放比例可以通过setaspectratio()函数修改。在本手册中,凡是没有注明的坐标,均指逻辑坐标。物理坐标物理坐标是描述设备的坐标体系。坐标原点在屏幕的左上角,X轴向右为正,Y轴向下为正,度量单位是象素。坐标原点、坐标轴方向、缩放比例都不能改变。1.3设备所谓“设备”,简单来说,就是绘图表面。在EasyX中,设备分两种,一种是默认的绘图窗口,另一种是IMAGE对象。通过Set
4、WorkingImage()函数可以设置当前用于绘图的设备。设置当前用于绘图的设备后,所有的绘图函数都会绘制在该设备上。二、绘图函2.1.1clearcliprgn这个函数用于清空裁剪区的屏幕内容。voidclearcliprgn();2.1.2cleardevice这个函数用于清除屏幕内容。具体的,是用当前背景色清空屏幕,并将当前点移至(0,0)。voidcleardevice();2.1.3closegraph这个函数用于关闭图形环境。voidclosegraph();2.1.4getaspectratio这个函数用于获取当前缩放因子。voidgetaspectratio(float*px
5、asp,float*pyasp);参数:pxasp返回x方向上的缩放因子。pyasp返回y方向上的缩放因子。2.1.5GetHWnd这个函数用于获取绘图窗口句柄。HWNDGetHWnd();在Windows下,句柄是一个窗口的标识,得到句柄后,可以使用WindowsSDK中的各种命令实现对窗口的控制。示例:/获得窗口句柄HWNDhWnd=GetHWnd();/使用API函数修改窗口名称SetWindowText(hWnd,Hello!);2.1.6graphdefaults这个函数用于重置视图、当前点、绘图色、背景色、线形、填充类型、字体为默认值。voidgraphdefaults();2.1
6、.7initgraph这个函数用于初始化绘图环境。HWNDinitgraph(intWidth,intHeight,intFlag=NULL);参数:Width绘图环境的宽度。Height绘图环境的高度。Style绘图环境的样式,默认为NULL。可为以下值:值含义SHOWCONSOLE表示可以保留原控制台窗口。2.1.8setaspectratio这个函数用于设置当前缩放因子。voidsetaspectratio(floatxasp,floatyasp);参数:Xaspx方向上的缩放因子。例如绘制宽度为100的矩形,实际的绘制宽度为100*xasp。Yaspy方向上的缩放因子。例如绘制高度为1
7、00的矩形,实际的绘制高度为100*yasp。说明:如果缩放因子为负,可以实现坐标轴的翻转。例如,执行setaspectratio(1,-1);后,可使y轴向上为正。2.1.9setcliprgn这个函数用于设置当前绘图设备的裁剪区。voidsetcliprgn(HRGNhrgn);参数:hrgn区域的句柄。创建区域所使用的坐标为物理坐标。如果该值为NULL,表示取消之前设置的裁剪区。说明:HRGN是Windows定义的表示区域的句柄。将该区域设置为裁剪区后,任何区域外的绘图都将无效(但仍然可以通过操作显存在裁剪区外绘图)。可以使用WindowsGDI函数创建一个区域。例如,创建矩形区域可以使
8、用函数:HRGNCreateRectRgn(intleft,inttop,intright,intbottom);此外,还可以使用函数CreateEllipticRgn创建椭圆形的区域,使用CreatePolygonRgn创建多边形的区域等等。还可以使用CombineRgn组合区域。更多关于区域的GDI函数,请参考MSDN中的RegionFunctions。注意:创建区域后,如果不再使用,请执行DeleteObject(HRGNhrgn)以释放该区域对应的系统资源。示例:以下代码用于创建一个矩形裁剪区,并在该裁剪区内画圆,请观察裁剪效果:#include#includevoidmain()/初
9、始化绘图窗口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这个函数用于设置坐
10、标原点。voidsetorigin(intx,inty);x原点的x坐标(使用物理坐标)。y原点的y坐标(使用物理坐标)。2.2颜色表示及相关函数2.2.1相关函数和数据如下:函数或数据描述getbkcolor获取当前绘图背景色。getcolor获取当前绘图前景色GetBValue返回指定颜色中的蓝色值。GetGValue返回指定颜色中的绿色值。GetRValue返回指定颜色中的红色值。HSLtoRGB转换HSL颜色为RGB颜色。HSVtoRGB转换HSV颜色为RGB颜色。RGB通过红、绿、蓝颜色分量合成颜色。RGBtoGRAY转换RGB颜色为灰度颜色。RGBtoHSL转换RGB颜色为HSL颜
11、色。RGBtoHSV转换RGB颜色为HSV颜色。setbkcolor设置当前绘图背景色。setcolor设置当前绘图前景色。BGR交换颜色中的红色和蓝色。2.2.2BGRBGR宏用于交换颜色中的红色和蓝色。COLORREFBGR(COLORREFcolor);参数:color需要交换红色和蓝色的颜色。返回值:返回交换红色和蓝色后的颜色。说明:颜色在内存中的表示形式为:0xbbggrr(bb=蓝,gg=绿,rr=红),但是显存中的颜色表现形式为0xrrggbb。注意,两者的红色和蓝色是相反的。直接操作显存时,可以通过BGR宏交换颜色的红色和蓝色部分。2.2.3getbkcolor这个函数用于获取
12、当前绘图背景色。COLORREFgetbkcolor();2.2.4GetBValueGetBValue宏用于返回指定颜色中的蓝色值。BYTEGetBValue(COLORREFrgb);参数:rgb指定的颜色。返回值:指定颜色中的蓝色值,值的范围0255。说明:GetBValue宏在WindowsSDK中定义。2.2.5getcolor这个函数用于获取当前绘图前景色COLORREFgetcolor();2.2.6GetGValueGetGValue宏用于返回指定颜色中的绿色值。BYTEGetGValue(COLORREFrgb);参数:rgb指定的颜色。返回值:指定颜色中的绿色值,值的范围0
13、255。说明:GetGValue宏在WindowsSDK中定义。2.2.7GetRValueGetRValue宏用于返回指定颜色中的红色值。BYTEGetRValue(COLORREFrgb);参数:rgb指定的颜色。返回值:指定颜色中的红色值,值的范围0255。说明:GetRValue宏在WindowsSDK中定义。2.2.8HSLtoRGB该函数用于转换HSL颜色为RGB颜色。COLORREFHSLtoRGB(floatH,floatS,floatL);参数:H原HSL颜色模型的Hue(色相)分量,0=H360。S原HSL颜色模型的Saturation(饱和度)分量,0=S=1。L原HSL
14、颜色模型的Lightness(亮度)分量,0=L=1。返回值:对应的RGB颜色。说明:HSL又称HLS。HSL的颜色模型如图所示:H是英文Hue的首字母,表示色相,即组成可见光谱的单色。红色在0度,绿色在120度,蓝色在240度,以此方向过渡。S是英文Saturation的首字母,表示饱和度,等于0时为灰色。在最大饱和度1时,具有最纯的色光。L是英文Lightness的首字母,表示亮度,等于0时为黑色,等于0.5时是色彩最鲜明的状态,等于1时为白色。示例:请参见示例程序中的“彩虹”。2.2.9HSVtoRGB该函数用于转换HSV颜色为RGB颜色。COLORREFHSVtoRGB(floatH,
15、floatS,floatV);参数:H原HSV颜色模型的Hue(色相)分量,0=H360。S原HSV颜色模型的Saturation(饱和度)分量,0=S=1。V原HSV颜色模型的Value(明度)分量,0=V=1。返回值:对应的RGB颜色。说明:HSV又称HSB。HSV的颜色模型如图所示:H是英文Hue的首字母,表示色相,即组成可见光谱的单色。红色在0度,绿色在120度,蓝色在240度,以此方向过渡。S是英文Saturation的首字母,表示饱和度,等于0时为灰色。在最大饱和度1时,每一色相具有最纯的色光。V是英文Value的首字母,表示明度,等于0时为黑色,在最大明度1时,是色彩最鲜明的状态
16、。示例:HSV颜色模型类似于HSL,示例程序中的“彩虹”是HSL模型的操作范例,可以参考。2.2.10RGBRGB宏用于通过红、绿、蓝颜色分量合成颜色。COLORREFRGB(BYTEbyRed,/颜色的红色部分BYTEbyGreen,/颜色的绿色部分BYTEbyBlue/颜色的蓝色部分);参数:byRed颜色的红色部分,取值范围:0255。byGreen颜色的绿色部分,取值范围:0255。byBlue颜色的蓝色部分,取值范围:0255。返回值:返回合成的颜色。说明:可以通过GetRValue、GetGValue、GetBValue宏从颜色中分离出红、绿、蓝颜色分量。注:RGB宏在Window
17、sSDK中定义。2.2.11RGBtoGRAY该函数用于返回与指定颜色对应的灰度值颜色。COLORREFRGBtoGRAY(COLORREFrgb);参数:rgb原RGB颜色。2.2.12RGBtoHSL该函数用于转换RGB颜色为HSL颜色。voidRGBtoHSL(COLORREFrgb,float*H,float*S,float*L);参数:rgb原RGB颜色。H用于返回HSL颜色模型的Hue(色相)分量,0=H360。S用于返回HSL颜色模型的Saturation(饱和度)分量,0=S=1。L用于返回HSL颜色模型的Lightness(亮度)分量,0=L=1。说明:HSL详见HSLtoR
18、GB。2.2.13RGBtoHSV该函数用于转换RGB颜色为HSV颜色。voidRGBtoHSV(COLORREFrgb,float*H,float*S,float*V);参数:rgb原RGB颜色。H用于返回HSV颜色模型的Hue(色相)分量,0=H360。S用于返回HSV颜色模型的Saturation(饱和度)分量,0=S=1。V用于返回HSV颜色模型的Value(明度)分量,0=V=1。2.2.14setbkcolor这个函数用于设置当前绘图背景色。voidsetbkcolor(COLORREFcolor);参数:color指定要设置的背景颜色。说明:“背景色”是调色板绘图模式下的概念,所
19、谓的背景色,是调色板中编号为0的颜色,可以通过修改编号0的颜色达到随时修改背景色的目的。在调色板模式下,显存中保存的是每种颜色在调色板中的编号。在EasyX中,已经废弃了调色板模式。真彩色绘图模式下没有调色板,显存中直接保存每个点的颜色,没有背景色的概念。EasyX采用真彩色绘图模式,同时使用背景色,目的有两个:1.当文字背景不是透明时,指定文字的背景色。2.执行cleardevice()或clearcliprgn()时,使用该颜色清空屏幕或裁剪区。示例:以下示例实现在蓝色背景下绘制红色的矩形:#include#includevoidmain()/初始化绘图窗口initgraph(640,48
20、0);/设置背景色为蓝色setbkcolor(BLUE);/用背景色清空屏幕cleardevice();/设置绘图色为红色setcolor(RED);/画矩形rectangle(100,100,300,300);/按任意键退出getch();closegraph();2.2.15setcolor这个函数用于设置当前绘图前景色。voidsetcolor(COLORREFcolor);参数:color要设置的前景颜色。2.3绘制图形相关函数22.3.2arc这个函数用于画椭圆弧。voidarc(intleft,inttop,intright,intbottom,doublestangle,doub
21、leendangle);参数: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(
22、intleft,inttop,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,consti
23、nt*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坐标。ri
24、ght椭圆外切矩形的右下角x坐标。bottom椭圆外切矩形的右下角y坐标。说明:由于屏幕像素点坐标是整数,因此用圆心和半径描述的椭圆无法处理直径为偶数的情况。而该函数的参数采用外切矩形来描述椭圆,可以解决这个问题。当外切矩形为正方形时,可以绘制圆。2.3.8fillcircle这个函数用于画填充圆。voidfillcircle(intx,inty,intradius);参数:x圆心的x坐标。y圆心的y坐标。radius圆的半径。说明:该函数使用当前线形和当前填充样式绘制有外框的填充圆。2.3.9fillellipse这个函数用于画填充的椭圆。voidfillellipse(intleft,in
25、ttop,intright,intbottom);参数:left椭圆外切矩形的左上角x坐标。top椭圆外切矩形的左上角y坐标。right椭圆外切矩形的右下角x坐标。bottom椭圆外切矩形的右下角y坐标。说明:该函数使用当前线形和当前填充样式绘制有外框的填充椭圆。由于屏幕像素点坐标是整数,因此用圆心和半径描述的椭圆无法处理直径为偶数的情况。而该函数的参数采用外切矩形来描述椭圆,可以解决这个问题。当外切矩形为正方形时,可以绘制填充圆。2.3.10fillpoly这个函数用于画填充的多边形。voidfillpoly(intnumpoints,constint*polypoints);参数:nump
26、oints多边形点的个数。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待填充区域的边界颜色。填充动作在该颜色围成的封闭区域内填充
27、。说明:填充动作以(x,y)为起点,向周围扩散,直到遇到border指定的颜色才会终止。所以,指定的区域必须是封闭的。填充的颜色和样式可以使用setfillstyle函数指定。2.3.12getfillstyle这个函数用于获取当前填充类型。voidgetfillstyle(COLORREF*pcolor,int*ppattern=NULL,char*pupattern=NULL);参数:pcolor返回当前填充色。ppattern返回当前填充图案。详见setfillstyle。pupattern指向char8的指针,如果该指针不为空,且当前填充图案为USER_FILL,返回当前的自定义填充样
28、式。2.3.13getheight这个函数用于获取绘图区高度。intgetheight();2.3.14getlinestyle这个函数用于获取当前线形。voidgetlinestyle(int*plinestyle,WORD*pupattern=NULL,int*pthickness=NULL);参数:plinestyle返回当前线型。详见setlinestyle。pupattern返回当前自定义线形数据。pthickness返回当前线形宽度。2.3.15getpixel这个函数用于获取点的颜色。COLORREFgetpixel(intx,inty);参数:x要获取颜色的x坐标。y要获取颜色
29、的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,int
30、dy);参数: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这个函数用于移动
31、当前点。有些绘图操作会从“当前点”开始,这个函数可以设置该点。还可以用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椭圆扇形的起始角
32、的弧度。endangle椭圆扇形的终止角的弧度。2.3.25putpixel这个函数用于画点。voidputpixel(intx,inty,COLORREFcolor);参数:x点的x坐标。y点的y坐标。color点的颜色。2.3.26rectangle这个函数用于画空心矩形。voidrectangle(intleft,inttop,intright,intbottom);参数:left矩形左部x坐标。top矩形上部y坐标。right矩形右部x坐标。bottom矩形下部y坐标。2.3.27setfillstyle这个函数用于设置当前填充类型。voidsetfillstyle(COLORREFc
33、olor,intpattern=SOLID_FILL,constchar*pupattern=NULL);参数:color填充颜色。pattern填充类型,可以是以下宏或值:宏值含义NULL_FILL1不填充SOLID_FILL2固实填充BDIAGONAL_FILL3CROSS_FILL4DIAGCROSS_FILL5DOT_FILL6FDIAGONAL_FILL7HORIZONTAL_FILL8VERTICAL_FILL9BDIAGONAL2_FILL10CROSS2_FILL11DIAGCROSS2_FILL12DOT2_FILL13FDIAGONAL2_FILL14HORIZONTAL2
34、_FILL15VERTICAL2_FILL16BDIAGONAL3_FILL17CROSS3_FILL18DIAGCROSS3_FILL19DOT3_FILL20FDIAGONAL3_FILL21HORIZONTAL3_FILL22VERTICAL3_FILL23INTERLEAVE_FILL24PATTERN_FILL25指定图案填充。详见pupattern参数。pupattern指定图案填充时的样式,仅当pattern为PATTERN_FILL时有效。该指针指向char8数组,该数组表示8x8的填充样式。具体的,每个数组元素表示一行的样式,每个char元素有8位,按位从高到低表示从左到右,
35、每个位表示一个点的状态,由此组成8x8的区域。示例:设置蓝色固实填充:setfillstyle(BLUE);设置红色斜线填充:setfillstyle(RED,LTSLASH_FILL);设置黄色的自定义的填充样式(圆形图案填充):setfillstyle(YELLOW,PATTERN_FILL,x3ex41x80x80x80x80x80x41);设置绿色的自定义的填充样式(细斜线夹粗斜线图案填充):setfillstyle(GREEN,PATTERN_FILL,x5ax2dx96x4bxa5xd2x69xb4);2.3.28setlinestyle这个函数用于设置当前线形。voidsetli
36、nestyle(intlinestyle,WORDupattern=NULL,intthickness=1);参数:linestyle线型,可以是以下值:值含义PS_SOLID线形为实线。PS_DASH线形为:-PS_DOT线形为:PS_DASHDOT线形为:-PS_DASHDOTDOT线形为:-PS_NULL线形为不可见。PS_USERSTYLE线形样式是自定义的,依赖于upattern参数。upattern自定义线形数据。自定义规则:该数据为WORD类型,共16个二进制位,每位为1表示画线,为0表示空白。从低位到高位表示从起始到终止的方向。仅当线型为PS_USERSTYLE时该参数有效。t
37、hickness线形宽度。示例:设置线形为点划线:setlinestyle(PS_DASHDOT);设置线形为宽度3像素的虚线:setlinestyle(PS_DASH,NULL,3);2.3.29setwritemode这个函数用于设置绘图位操作模式。voidsetwritemode(intmode);参数:mode二元光栅操作码(即位操作模式),支持全部的16种二元光栅操作码,罗列如下:位操作模式描述R2_BLACK绘制出的像素颜色=黑色R2_COPYPEN绘制出的像素颜色=当前颜色(默认)R2_MASKNOTPEN绘制出的像素颜色=屏幕颜色AND(NOT当前颜色)R2_MASKPEN绘制
38、出的像素颜色=屏幕颜色AND当前颜色R2_MASKPENNOT绘制出的像素颜色=(NOT屏幕颜色)AND当前颜色R2_MERGENOTPEN绘制出的像素颜色=屏幕颜色OR(NOT当前颜色)R2_MERGEPEN绘制出的像素颜色=屏幕颜色OR当前颜色R2_MERGEPENNOT绘制出的像素颜色=(NOT屏幕颜色)OR当前颜色R2_NOP绘制出的像素颜色=屏幕颜色R2_NOT绘制出的像素颜色=NOT屏幕颜色R2_NOTCOPYPEN绘制出的像素颜色=NOT当前颜色R2_NOTMASKPEN绘制出的像素颜色=NOT(屏幕颜色AND当前颜色)R2_NOTMERGEPEN绘制出的像素颜色=NOT(屏幕颜
39、色OR当前颜色)R2_NOTXORPEN绘制出的像素颜色=NOT(屏幕颜色XOR当前颜色)R2_WHITE绘制出的像素颜色=白色R2_XORPEN绘制出的像素颜色=屏幕颜色XOR当前颜色注:1.AND/OR/NOT/XOR为布尔运算。2.屏幕颜色指绘制所经过的屏幕像素点的颜色。3.当前颜色是指通过setcolor设置的用于当前绘制的颜色。2.4文字输出相关函数2.4.1相关函数和数据如下:函数或数据描述getfont获取当前字体样式。LOGFONT保存字体样式的结构体。outtext在当前位置输出字符串。outtextxy在指定位置输出字符串。drawtext在指定区域内以指定格式输出字符串。
40、setbkmode设置输出文字时的背景模式。setfont设置当前字体样式。textheight获取字符串实际占用的像素高度。textwidth获取字符串实际占用的像素宽度。2.4.2drawtext这个函数用于在指定区域内以指定格式输出字符串。intdrawtext(LPCTSTRstr,RECT*pRect,UINTuFormat);intdrawtext(TCHARc,RECT*pRect,UINTuFormat);参数:str待输出的字符串。pRect指定的矩形区域的指针。某些uFormat标志会使用这个矩形区域做返回值。详见后文说明。uFormat指定格式化输出文字的方法。详见后文说
41、明。C待输出的字符。返回值:函数执行成功时,返回文字的高度。如果指定了DT_VCENTER或DT_BOTTOM标志,返回值表示从pRect-top到输出文字的底部的偏移量。如果函数执行失败,返回0。说明:注:下文关于文字位置的描述,均是相对于pRect指向的矩形而言。标志描述DT_BOTTOM调整文字位置到矩形底部,仅当和DT_SINGLELINE一起使用时有效。DT_CALCRECT检测矩形的宽高。如果有多行文字,drawtext使用pRect指定的宽度,并且扩展矩形的底部以容纳每一行文字。如果只有一行文字,drawtext修改pRect的右边以容纳最后一个文字。无论哪种情况,drawtex
42、t都返回格式化后的文字高度,并且不输出文字。DT_CENTER文字水平居中。DT_EDITCONTROL以单行编辑的方式复制可见文本。具体的说,就是以字符的平均宽度为计算依据,同时用这个方式应用于编辑控制,并且这种方式不显示可见部分的最后一行。DT_END_ELLIPSIS对于文本显示,如果字符串的末字符不在矩形内,它会被截断并以省略号标识。如果是一个单词而不是一个字符,其末尾超出了矩形范围,它不会被截断。字符串不会被修改,除非指定了DT_MODIFYSTRING标志。DT_EXPANDTABS展开TAB符号。默认每个TAB占8个字符位置。注意,DT_WORD_ELLIPSIS、DT_PATH
43、_ELLIPSIS和DT_END_ELLIPSIS不能和DT_EXPANDTABS一起用。DT_EXTERNALLEADING在行高里包含字体的行间距。通常情况下,行间距不被包含在正文的行高里。DT_HIDEPREFIXWindows2000/XP:忽略文字中的前缀字符(&),并且前缀字符后面的字符不会出现下划线。其他前缀字符仍会被处理。例如:输入字符串:A&bc&d通常输出:Abc&dDTDT_HIDEPREFIX:Abc&dDT_INTERNAL使用系统字体计算文字的宽高等属性。DT_LEFT文字左对齐。DT_MODIFYSTRING修改指定字符串为显示出的正文。仅当和DT_END_ELL
44、IPSIS或DT_PATH_ELLIPSIS标志同时使用时有效。DT_NOCLIP使输出文字不受pRect裁剪限制。使用DT_NOCLIP会使drawtext执行稍快一些。DT_NOFULLWIDTHCHARBREAKWindows2000/XP:防止换行符插入到DBCS(double-widecharacterstring,即宽字符串),换行规则相当于SBCS字符串。仅当和DT_WORDBREAK一起使用时有效。例如,汉字就是宽字符,设置该标志后,连续的汉字会像英文单词一样不被换行符中断。DT_NOPREFIX关闭前缀字符的处理。通常,DrawText解释前缀转义符&为其后的字符加下划线,解
45、释&为显示单个&。指定DT_NOPREFIX,这种处理被关闭。例如:输入字符串:A&bc&d通常输出:Abc&dDT_NOPREFIX:A&bc&dDT_PATH_ELLIPSIS对于显示的文字,用省略号替换字符串中间的字符以便容纳于矩形内。如果字符串包含反斜杠(),DT_PATH_ELLIPSIS尽可能的保留最后一个反斜杠后面的文字。字符串不会被修改,除非指定了DT_MODIFYSTRING标志。DT_PREFIXONLYWindows2000/XP:仅仅在(&)前缀字符的位置下绘制一个下划线。不绘制字符串中的任何其他字符。例如:输入字符串:A&bc&d通常输出:Abc&dDT_PREFIX
46、ONLY:_DT_RIGHT文字右对齐。DT_RTLREADING设置从右向左的阅读顺序(当文字是希伯来文或阿拉伯文时)。默认的阅读顺序是从左向右。DT_SINGLELINE使文字显示在一行。回车和换行符都无效。DT_TABSTOP设置TAB制表位。uFormat的158位指定TAB的字符宽度。默认TAB表示8个字符宽度。注意,DT_CALCRECT、DT_EXTERNALLEADING、DT_INTERNAL、DT_NOCLIP和DT_NOPREFIX不能和DT_TABSTOP一起用。DT_TOP文字顶部对齐。DT_VCENTER文字垂直居中。仅当和DT_SINGLELINE一起使用时有效。
47、DT_WORDBREAK自动换行。当文字超过右边界时会自动换行(不拆开单词)。回车符同样可以换行。DT_WORD_ELLIPSIS截去无法容纳的文字,并在末尾增加省略号。示例:以下范例在屏幕中央输出字符串“HelloWorld”:#include#includevoidmain()/绘图环境初始化initgraph(640,480);/在屏幕中央输出字符串RECTr=0,0,640,480;drawtext(HelloWorld,&r,DT_CENTER|DT_VCENTER|DT_SINGLELINE);/按任意键退出getch();closegraph();2.4.3getfont这个函数
48、用于获取当前字体样式。voidgetfont(LOGFONT*font);参数:font指向LOGFONT结构体的指针。2.4.4LOGFONT这个结构体定义了字体的属性。structLOGFONTLONGlfHeight;LONGlfWidth,LONGlfEscapement;LONGlfOrientati,LONGlfWeight;BYTElfItalic;BYTElfUnderline,BYTElfStrikeOut;BYTElfCharSet;BYTElfOutPrecision;BYTElfClipPrecision;BYTElfQuality,BYTElfPitchAndFami
49、ly;TCHARlfFaceNameLF_FACESIZE;成员lfHeight指定高度(逻辑单位)。lfWidth指定字符的平均宽度(逻辑单位)。如果为0,则比例自适应。lfEscapement字符串的书写角度,单位0.1度,默认为0。lfOrientation每个字符的书写角度,单位0.1度,默认为0。lfWeight字符的笔画粗细,范围01000,0表示默认粗细,使用数字或下表中定义的宏均可。宏粗细值FW_DONTCARE0FW_THIN100FW_EXTRALIGHT200FW_ULTRALIGHT200FW_LIGHT300FW_NORMAL400FW_REGULAR400FW_ME
50、DIUM500FW_SEMIBOLD600FW_DEMIBOLD600FW_BOLD700FW_EXTRABOLD800FW_ULTRABOLD800FW_HEAVY900FW_BLACK900lfItalic指定字体是否是斜体。lfUnderline指定字体是否有下划线。lfStrikeOut指定字体是否有删除线。lfCharSet指定字符集。可以使用以下预定义的值:ANSI_CHARSETBALTIC_CHARSETCHINESEBIG5_CHARSETDEFAULT_CHARSETEASTEUROPE_CHARSETGB2312_CHARSETGREEK_CHARSETHANGUL_CH
51、ARSETMAC_CHARSETOEM_CHARSETRUSSIAN_CHARSETSHIFTJIS_CHARSETSYMBOL_CHARSETTURKISH_CHARSET其中,OEM_CHARSET表示字符集依赖本地操作系统。DEFAULT_CHARSET表示字符集基于本地操作系统。例如,系统位置是English(UnitedStates),字符集将设置为ANSI_CHARSET。lfOutPrecision指定文字的输出精度。输出精度定义输出与所请求的字体高度、宽度、字符方向、行距、间距和字体类型相匹配必须达到的匹配程度。可以是以下值:值含义OUT_DEFAULT_PRECIS指定默认的
52、映射行为。OUT_DEVICE_PRECIS当系统包含多个名称相同的字体时,指定设备字体。OUT_OUTLINE_PRECIS指定字体映射选择TrueType和其它的outline-based字体。OUT_RASTER_PRECIS当系统包含多个名称相同的字体时,指定光栅字体(即点阵字体)。OUT_STRING_PRECIS这个值并不能用于指定字体映射,只是指定点阵字体枚举数据。OUT_STROKE_PRECIS这个值并不能用于指定字体映射,只是指定TrueType和其他的outline-based字体,以及矢量字体的枚举数据。OUT_TT_ONLY_PRECIS指定字体映射只选择TrueTy
53、pe字体。如果系统中没有安装TrueType字体,将选择默认操作。OUT_TT_PRECIS当系统包含多个名称相同的字体时,指定TrueType字体。lfClipPrecision指定文字的剪辑精度。剪辑精度定义如何剪辑字符的一部分位于剪辑区域之外的字符。可以是以下值:值含义CLIP_DEFAULT_PRECIS指定默认的剪辑行为。CLIP_STROKE_PRECIS这个值并不能用于指定字体映射,只是指定光栅(即点阵)、矢量或TrueType字体的枚举数据。CLIP_EMBEDDED当使用内嵌的只读字体时,必须指定这个标志。CLIP_LH_ANGLES如果指定了该值,所有字体的旋转都依赖于坐标系统的方向是逆时针或顺时针。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度声讯服务合同
- 纸制抹布市场发展预测和趋势分析
- 2024年度慈善活动大巴车租赁运输合同
- 2024年度南京专利实施许可合同
- 2024年度保险合同及其理赔流程
- 2024年度智能安防系统建设及运维合同
- 2024年度YZA商务咨询有限公司咨询服务合同
- 04版影视版权购买与授权合同
- 羊绒衫市场发展现状调查及供需格局分析预测报告
- 2024年度城市公共照明设施维护合同
- GB/T 20671.7-2006非金属垫片材料分类体系及试验方法第7部分:非金属垫片材料拉伸强度试验方法
- GB/T 14337-1993合成短纤维断裂强力及断裂伸长试验方法
- GB/T 10001.4-2021公共信息图形符号第4部分:运动健身符号
- 南京市芳草园小学苏教版五年级数学上册《列举法解决问题的策略》活动单(区级公开课定稿)
- 修剪指甲培智五年级上册生活适应教案
- 计算机信息系统灾难恢复计划(完整版)资料
- 脚手架搭设及基本知识教程课件
- 特种作业人员体检表
- 冲积平原的形成(课件)-高考地理一轮复习课件
- 限高杆施工图 2
- 摄影培训课件:会议摄影拍摄技巧
评论
0/150
提交评论