《第13章 C语言综合应用程序设计》由会员分享,可在线阅读,更多相关《第13章 C语言综合应用程序设计(23页珍藏版)》请在金锄头文库上搜索。
1、第第13章章C语言综合程序设计多模块程序设计基础多模块程序设计基础图形处理基础图形处理基础与操作系统的接口与操作系统的接口C程序中的汉字显示技术程序中的汉字显示技术在软件设计过程中,当用计算机高级语言进行程序设计时,在软件设计过程中,当用计算机高级语言进行程序设计时,对于完成大规模的程序设计,往往按其问题的需要,将程序对于完成大规模的程序设计,往往按其问题的需要,将程序划分成若干段去编写。划分成若干段去编写。一个语言源程序由若干模块组成,这些模块可以分别装配成一个语言源程序由若干模块组成,这些模块可以分别装配成几个源程序文件,这些源程序文件可以分别进行编辑、编译,几个源程序文件,这些源程序文件
2、可以分别进行编辑、编译,经连接后形成可执行文件。经连接后形成可执行文件。使用多模块编程技术的处理过程大致如下:使用多模块编程技术的处理过程大致如下:首首先先将将一一个个大大的的源源程程序序根根据据其其功功能能合合理理地地划划分分为为若若干干个个小小的的源源程程序序,每每个个小小源源程程序序均均以以程程序序文文件件(文文件件扩扩展展名名为为. .C C)的的形式保存在磁盘上。形式保存在磁盘上。再再用用编编译译器器进进行行编编译译,将将工工程程文文件件中中指指定定的的多多个个文文件件进进行行编编译,生成多个目标文件和一个可执行的文件。译,生成多个目标文件和一个可执行的文件。当当某某个个文文件件有有
3、错错时时,编编译译器器会会报报告告错错误误。用用户户可可进进行行修修改改,修修改改后后再再编编译译时时,编编译译器器只只会会对对修修改改文文件件进进行行重重新新编编译译,其其它模块不再被编译,原来生成的目标文件仍可使用。它模块不再被编译,原来生成的目标文件仍可使用。多模块程序设计基础多模块程序设计基础一、多模块程序的建立一、多模块程序的建立二、程序模块之间的通讯 在在C语言的多模块编程中,模块间通信往往语言的多模块编程中,模块间通信往往使用外部变量。使用外部变量。 图形处理基础 一、图形程序运行条件 在编制图形处理程序,使用图形函数之前,必须在程序中对使在编制图形处理程序,使用图形函数之前,必
4、须在程序中对使用的图形系统进行初始化,把屏幕显示适配器设置为一种图形模式,用的图形系统进行初始化,把屏幕显示适配器设置为一种图形模式,选择适当类型的图形显示适配器驱动程序,设置好驱动程序的寻找选择适当类型的图形显示适配器驱动程序,设置好驱动程序的寻找路径名等路径名等 二、基本图形处理函数1 1、图形初始化函数、图形初始化函数显示模式控制函数显示模式控制函数initgraphinitgraph函数原型:void void farfar initgraphinitgraph( (intint far far * *graphdrivergraphdriver, , intint far far *
5、 *graphmodegraphmode, char far *path), char far *path)函数的功能,把图形适配器设置为一种图形模式,将选择的图形驱,把图形适配器设置为一种图形模式,将选择的图形驱动程序(在动程序(在BGI文件中)装入到内存。文件中)装入到内存。 检测显示器硬件函数检测显示器硬件函数detectgraphdetectgraph函数原型:void far detectgraph(int far *graphdriver,int far *);函数功能:完完成成对对适适配配器器的的检检查查,获获取取显显示示器器类类型型号号及及相相应应的的显显示示模模式式,把把显显
6、示示类类型型号号赋赋予予graphdrivergraphdriver,显显示示模模式式赋赋予予graphmodegraphmode。graphdrivergraphdriver和和graphmodegraphmode的意义与函数的意义与函数initgraphinitgraph相同。相同。清屏函数清屏函数cleardevicecleardevice函数原型:void farvoid far cleardevice cleardevice(void);(void);函数功能:清除屏幕上的其它信息,函数作用范围为整个屏幕。清除屏幕上的其它信息,函数作用范围为整个屏幕。恢复显示方式恢复显示方式clos
7、egraphclosegraph函数原型: void farvoid far closegraph closegraph(void);(void);函数功能:当当图图形形处处理理工工作作结结束束后后,关关闭闭图图形形系系统统,返返回回文文本本工工作作方式。方式。 恢复工作模式函数恢复工作模式函数restorecrtmoderestorecrtmode函数原型: void far restorecrtmode(void);函数功能:恢复屏幕显示模式为调用:恢复屏幕显示模式为调用initgraphinitgraph前的设置前的设置设置图形工作模式函数设置图形工作模式函数setgraphmodese
8、tgraphmode函数原型: void farvoid far setgraphmode setgraphmode(void);(void);函数功能:将系统设置成图形模式并清屏。:将系统设置成图形模式并清屏。注意:以上两个函数常交互使用,可使显示器工作方式注意:以上两个函数常交互使用,可使显示器工作方式在图形和文本方式之间来回切换,这在编制菜单程序和在图形和文本方式之间来回切换,这在编制菜单程序和说明程序时很有用处。说明程序时很有用处。 2、基本图形处理函数画点函数原型:void void farfar putpixelputpixel( (intint x,x,intint y,y,in
9、tint color); color); /*/*画画象象素点函数素点函数*/*/画线函数原型:void void far far line(line(int int startxstartx, ,int int startystarty, ,int int endxendx, ,int int endyendy); /*); /*画线函数画线函数*/*/说明:说明:函函数数putpixelputpixel在在点点(x x,y y)处处画画一一个个颜颜色色为为colorcolor的的象象素素点。点。 函数函数line在在(startx, starty)和和(endx,int endy)两点之两
10、点之间画一条直线,颜色为系统当前颜色。间画一条直线,颜色为系统当前颜色。 画多边形函数原型如下:画多边形函数原型如下:void far drawpoly(int numpoints,int far *points);函数功能:用用当当前前颜颜色色画画一一个个顶顶点点数数为为numpointsnumpoints的的多多边边形形,各各个个顶顶点点坐坐标(标(x x,y y)连续存放在连续存放在pointspoints指向的整型数组中。指向的整型数组中。画矩形函数原型如下:画矩形函数原型如下:void far rectangle(int left, int top, int right, int b
11、ottom);函数功能:用用当当前前颜颜色色画画一一个个以以(left, left, toptop)为为左左上上角角坐坐标标,以以(right, bottomright, bottom)为右下角坐标的矩形。为右下角坐标的矩形。画条形图函数有两个,其原型分别是:画条形图函数有两个,其原型分别是:void void far far bar(bar(intint left,left,intint top,top, intint right,right, intint bottom); bottom); /*/*二二维维实心条形图实心条形图*/*/void void far far bar3d(bar
12、3d(intint left,left, intint top,top, intint right,right, intint bottom,bottom, intint depth,depth, int topflag int topflag); ); /*/*三维条形图三维条形图*/*/函函数数barbar是是用用当当前前颜颜色色,画画一一个个以以(left, left, toptop)为为左左上上角角坐坐标标,以以(right, right, bottombottom)为为右右下下角角坐坐标标的的矩矩形形(同同rectanglerectangle函函数数)。矩矩形形填填充充模模式式及及颜
13、颜色色可可以以设设定定,形形成成一一个个没没有有边边框框的的实实心心条条形形图图。若若没没有有设设定定填充模式及颜色,则是用缺省模式。填充模式及颜色,则是用缺省模式。 函数函数bar3d用当前颜色,画一个厚度为用当前颜色,画一个厚度为depth个像素点三维条形图个像素点三维条形图 画圆函数原型:画圆函数原型:void far circle(int x,int y,int radius);函数功能:用用当当前前颜颜色色画画一一个个以以(x, x, y y)为为圆圆心心, radiusradius为为半半径径的的画画一个圆。一个圆。画圆弧函数原型:画圆弧函数原型:void far arc(int
14、x,int y,int start,int end,int radius);函数功能:用用当当前前颜颜色色,以以x x,y y为为圆圆心心,以以startstart、endend为为起起止止角角,以以radiusradius为半径画圆弧。为半径画圆弧。画扇形函数原型:画扇形函数原型:void far pieslice(int x,int y,int start,int end,int radius);函数功能:用用当当前前颜颜色色,以以x x,y y为为圆圆心心,以以startstart、endend为为起起止止角角,以以radiusradius为半径画扇形。为半径画扇形。画椭圆函数原型:画椭
15、圆函数原型:void far ellipse(int x,int y,int start,int end,int xradius,int yradius);函数功能:用用当当前前画画线线的的颜颜色色,以以x x,y y为为圆圆心心,以以xradiusxradius、yradiusyradius为两轴半径,以为两轴半径,以startstart、endend为起止角画椭圆。为起止角画椭圆。前景颜色设置函数前景颜色设置函数setcolorsetcolor函数原型:函数原型:void farvoid far setcolor setcolor( (intint color); color);函数的功能
16、:用颜色值:用颜色值colorcolor设置当前画图颜色。设置当前画图颜色。背景颜色设置函数背景颜色设置函数setbkcolorsetbkcolor函数原型:函数原型:void farvoid far setbkcolor setbkcolor( (intint color); color);函数的功能:用用颜颜色色值值colorcolor设设置置背背景景颜颜色色。颜颜色色值值colorcolor即即可可用用值值表表示,也可用大写的宏名表示。示,也可用大写的宏名表示。填色函数填色函数setfillstylesetfillstyle函数原型:函数原型:void far setfillstyle(
17、int pattern,int color);函数的功能:函函数数setfillstylesetfillstyle将将用用设设定定的的colorcolor颜颜色色和和patternpattern图图模模式对后面画出的轮廓图进行填充式对后面画出的轮廓图进行填充 封闭图形的填充函数封闭图形的填充函数floodfillfloodfill函数原型:函数原型:void farvoid far floodfill floodfill( (intint x, x,intint y, y,int bordercolorint bordercolor););函数功能:根根据据封封闭闭图图形形之之中中的的任任意意
18、一一点点(x,yx,y),对对任任意意封封闭闭图图形形进进行填充。行填充。 3、颜色控制函数、颜色控制函数4、视口操作函数设置视口的函数设置视口的函数函数原型:函数原型:void void farfar setviewportsetviewport( (intint x1,x1,intint y1,y1,intint x2,x2,intint y2,y2,int int clipflagclipflag););函数的功能:(x1,x2)为视口左上角坐标,(为视口左上角坐标,(x2,y2)为视口右下为视口右下角坐标,它们均以原屏幕物理坐标远点为参考点。角坐标,它们均以原屏幕物理坐标远点为参考点。
19、clipflag若不为若不为0,则所花图形超出视口的部分被切除,而不显示出来;若为,则所花图形超出视口的部分被切除,而不显示出来;若为0,则超,则超出视口的部分仍将显示出来。出视口的部分仍将显示出来。视口清除函数视口清除函数函数的原型:函数的原型:void far clearviewport(void);函数的功能:清除视口内的图形清除视口内的图形5、图形模式下字符输出函数当前位置文本输出函数当前位置文本输出函数函数的原型:函数的原型:void far outtext(char *str);函数的功能:在在当当前前位位置置输输出出由由strstr指指定定的的字字符符串串,使使用用outtext
20、outtext函函数数的的主要优点是它能用不同的字型、大小,用不同的方向输出文字。主要优点是它能用不同的字型、大小,用不同的方向输出文字。注注意意:在在图图形形方方式式下下,没没有有可可见见光光标标。但但在在屏屏幕幕上上还还是是存存在在着着当当前前显显示示位置,就好像有一个可见光标一样。位置,就好像有一个可见光标一样。字符输出定位函数字符输出定位函数函数的原型:函数的原型:void farvoid far outtextxy outtextxy( (intint x, x,intint y,char * y,char *strstr););函数的功能:将将strstr指指定定的的字字符符串串输
21、输出出到到窗窗口口指指定定坐坐标标位位置置( (x,y)x,y),如如果果x x或或y y或两者均超过了窗口边界,则不会显示。或两者均超过了窗口边界,则不会显示。改变字型、大小和方向的函数改变字型、大小和方向的函数函数原型:函数原型:void farvoid far settextstyle settextstyle( (intint font, font,intint direction, direction,int charsizeint charsize););函数的功能:设置输出文本字体、大小和方向的函数设置输出文本字体、大小和方向的函数操作系统接口 DOS简介 DOS是目前是目前PC
22、微型机上广泛采用的一种单用户单任微型机上广泛采用的一种单用户单任务的操作系统务的操作系统 DOS具有强大的功能,它的功能是对系统的基本输具有强大的功能,它的功能是对系统的基本输入输出进行控制及对内存和进程的管理入输出进行控制及对内存和进程的管理 DOSDOS采用层次结构,由引导程序模块、基本输入输出采用层次结构,由引导程序模块、基本输入输出模块、文件管理和系统调用模块、命令处理模块等几个模块、文件管理和系统调用模块、命令处理模块等几个部分组成部分组成 DOS为用户引用其功能子程序,进行资源调用,利为用户引用其功能子程序,进行资源调用,利用了系统的软中断。通过用了系统的软中断。通过CPU的软中断
23、指令的软中断指令INT n调用相调用相应的程序应的程序 操作系统接口库函数 通用软中断调用库函数通用软中断调用库函数函数的原型为:函数的原型为:intint int86( int86(int intnoint intno, , uinon uinon REGS * REGS * inregs inregs, , uinon uinon REGS *REGS * outregs outregs);); 函数的功能:调用一个由参数调用一个由参数intno指定的软中断。在调用软中断之前,把指定的软中断。在调用软中断之前,把inregs中的寄存器值拷贝到各寄存器中;调用返回后,中的寄存器值拷贝到各寄存
24、器中;调用返回后,int86函数把当前函数把当前寄存器的值拷贝到寄存器的值拷贝到outregs。共用体类型共用体类型REGSREGS定义在定义在dos.hdos.h头文件中,其定义如下:头文件中,其定义如下:struct WORDREGS unsigned int ax,bx,cx,dx,si,cflag,flags;struct BYTEREGS unsigned char al,ah,bl,bh,cl,ch,dl,dh;union REGS regs struct WORDREGS x; struct BYTEREGS h; 系统功能调用库函数 C C语语言言中中系系统统功功能能调调用用库
25、库函函数数intdosintdos函函数数和和intdosxintdosx函函数数与与DOSDOS的的系系统统功功能能调调用用INT 21HINT 21H相对应,其函数的原型为:相对应,其函数的原型为:int intdos(union REGS *inregs,union REGS *outregs);int int intdosxintdosx(union (union REGS REGS * *inregsinregs,union ,union REGS REGS * *outregsoutregs, ,structstruct SREGS SREGS * *segregssegregs)
26、;);函函数数的的参参数数inregsinregs是是入入口口参参数数,表表示示相相应应的的功功能能号号。参参数数outregsoutregs是是出出口口参参数数,调调用用后后返返回回值值在在outregsoutregs的的AXAX寄寄存存器器中中,并并将将设设置置标标志志寄寄存存器器flagsflags;若若进进位位标标志志cflagcflag被被置置位位,则则表表示示调调用用出出错错,此此时时AXAX中中为为错错误误代代码码,若若为为零零,则则表表示示成成功功。参参数数segregssegregs是是intdosxintdosx函函数数特特有有的的,它它是是一一个个结结构构SREGSSRE
27、GS类型的指针,结构类型的指针,结构SREGSSREGS类型在类型在dos.hdos.h头文件中定义。头文件中定义。struct SREGS unsigned int cs,ss,ds,es;定义该结构是为了设置和保存定义该结构是为了设置和保存CPU中的段寄存器。中的段寄存器。 发送DOS命令库函数system函数原型:函数原型:intint system(char * system(char *cmdcmd););函数功能:使:使DOS的命令处理模块的命令处理模块COMMAND文件执行文件执行由字符串由字符串cmd给定的给定的DOS命令、批命令或其它子程序。命令、批命令或其它子程序。 鼠标器
28、及其应用 鼠标器概况鼠标器概况 鼠鼠标标器器的的按按键键有有一一键键的的(如如MacintoshMacintosh计计算算机机使使用用)、两两键键的的(属属于于MicrosoftMicrosoft系系列列)或或三三键键的的(属属于于IBMIBM系系列列)。现在普遍使用三键的鼠标器。现在普遍使用三键的鼠标器。 主主要要有有两两种种形形式式的的鼠鼠标标器器,一一种种是是机机械械式式鼠鼠标标器器,另另一种时光电式鼠标器。一种时光电式鼠标器。鼠标器驱动程序鼠标器驱动程序 在系统配置文件在系统配置文件configconfig.sys.sys中加入命令中加入命令 device=mouse.sys/1dev
29、ice=mouse.sys/1 在自动批处理文件在自动批处理文件autoexec.batautoexec.bat中加入命令中加入命令 当用鼠标器作为输入设备时,在屏幕上也有一个光当用鼠标器作为输入设备时,在屏幕上也有一个光标表示当前位置,在标表示当前位置,在Microsoft的鼠标库函数种定义了缺的鼠标库函数种定义了缺省的光标形状:在图形方式下是一个箭头,在文本方式省的光标形状:在图形方式下是一个箭头,在文本方式下是一个亮块。可以通过鼠标器函数控制鼠标器光标的下是一个亮块。可以通过鼠标器函数控制鼠标器光标的点亮和熄灭点亮和熄灭 鼠标器鼠标器INT 33HINT 33H功能调用功能调用 安装好
30、鼠标器驱动程序,并进行初始化后,就可以安装好鼠标器驱动程序,并进行初始化后,就可以使用鼠标驱动程序来管理鼠标的各种操作。鼠标驱动程使用鼠标驱动程序来管理鼠标的各种操作。鼠标驱动程序将序将INT 33H功能调用作为鼠标器的操作中断。这样每当功能调用作为鼠标器的操作中断。这样每当移动一下鼠标,或者按动一下鼠标器的按钮,就将产生移动一下鼠标,或者按动一下鼠标器的按钮,就将产生一次一次INT 33H中断中断 程序中的汉字显示技术 汉字显示的基本原理 在在西西文文DOSDOS下下显显示示汉汉字字的的方方法法,是是将将中中文文DOSDOS中中的的汉汉字字库库作作为为一一个个二二进进制制数数据据文文件件,存
31、存放放在在磁磁盘盘中中,用用时时打打开开,并并找找到到相相应应的的汉汉字字字字模模,将将其其取取出出并并显显示示出出来来。也也可可以以建建立立专专用用小小字字库库,把把它它可可作作为为程程序序的的一一部部分分,也也可可做做成成一一个个文文件件存存放放在在磁盘上,用时打开调用即可。磁盘上,用时打开调用即可。国标汉字字符集与区位码汉字内码 内码与区位码的转换关系及字模显示技术 几种常用汉字库中地址码几种常用汉字库中地址码offsetoffset的计算公式:的计算公式: ucdosucdos中字库中字库CCLIB.DATCCLIB.DAT存放存放16161616点阵模式:点阵模式: offset=(
32、offset=(qhqh-1)*94+-1)*94+whwh-1)*32l;-1)*32l; CCDOS2.13CCDOS2.13中的字库中的字库HZK16HZK16存放存放16161616点阵字模:点阵字模: offset=(offset=(qhqh-16)*94+-16)*94+whwh-1+15*94)*32l;-1+15*94)*32l; SPDOS5.0SPDOS5.0的的简简体体字字库库CCLIB.DATCCLIB.DAT存存放放16161616点点阵阵字字模:模: offset=(offset=(qhqh-7)*94+-7)*94+whwh-1)*32l;-1)*32l; CCD
33、OS2.13CCDOS2.13中的字库中的字库HZK24HZK24存放存放24242424点阵字模:点阵字模: offset=(offset=(qhqh-16)*94+-16)*94+whwh-1)*72l;-1)*72l;中文DOS下显示汉字 启动中文启动中文DOS系统系统利用中文编辑器编写利用中文编辑器编写C语言程序语言程序在在Turbo CTurbo C集成开发环境下编译连接带有文字的源程序,集成开发环境下编译连接带有文字的源程序,从而生成执行程序从而生成执行程序在中文在中文DOSDOS下,运行带有汉字的执行程序,这样在显示下,运行带有汉字的执行程序,这样在显示汉字的地方。将会正确显示汉字汉字的地方。将会正确显示汉字西文DOS下显示汉字 利用画点函数利用画点函数putpixel函数显示汉字函数显示汉字 利用画线函数利用画线函数linetolineto函数显示汉字函数显示汉字汉字的缩放 利用旋转缩放汉字利用旋转缩放汉字