C语言程序设计第11章图形和用户界面技术_第1页
C语言程序设计第11章图形和用户界面技术_第2页
C语言程序设计第11章图形和用户界面技术_第3页
C语言程序设计第11章图形和用户界面技术_第4页
C语言程序设计第11章图形和用户界面技术_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第11章 文本窗口与图形显示技术,学习目标 本章内容中我们将学习 1. 文本窗口的程序设计 2. 图形显示技术的应用 3. 汉字显示方法及其应用,11.1 文本窗口的程序设计,学一学 1 窗口定义 Turbo C使用函数window()定义屏幕窗口,函数原型为: void window(int x1,int y1,int x2,int y2); 其中参数x1,y1是窗口左上角的坐标,x2,y2是右下角的坐标。 2 窗口操作函数 (1) 设置背景颜色 void textbackground(int color); (2) 设置文本颜色 void textcolor(int color); (3)

2、 字符串输出 void cputs(char *string); (4) 光标定位 void gotoxy(int x,int y); (5) 清除窗口文本 void clrscr();,试一试,问题11.1 定制一个宽44列,高17行的英文名片。使名片窗口左上角坐标是(7,7),背景颜色为白色,字符为黑色。然后在名片窗口中显示单位、姓名、通信地址和联系方式等内容文本字符。 【解题步骤】 1 利用函数window()定义屏幕窗口; 2 利用函数textbackgroud()、textcolor()分别设置窗口背景颜色和文本颜色; 3 利用清屏函数clrscr(),使设置的颜色生效; 4 利用窗

3、口操作函数gotoxy()定位输出光标; 5 用窗口操作函数cputs(),输出名片上的文本字符; 6 重新用函数window()恢复全屏幕窗口,textbackground(BLACK)恢复0号背景颜色,textcolor(7)恢复7号文本颜色; 7 用clrscr(),使设置的颜色生效。,设计目标,程序代码,void main() textbackground(BLUE);/*设置蓝色屏幕背景颜色*/ clrscr(); /*清屏,使设置的背景颜色生效*/ window(7,7,51,24);/*创建左上角(7,7),右下角(51,24)的窗口*/ textbackground(WHITE

4、) /*设置白色窗口背景颜色*/ textcolor(BLACK); /*设置黑色文本颜色*/ clrscr(); /*清屏,使设置的颜色生效*/ gotoxy(13,4); /*光标定位在坐标(13,4)处*/ cputs(SHENZHEN POLYTECHNIC);/*输出字符串SHENZHEN POLYTECHNIC*/ gotoxy(13,6); cputs(Department of Computer); gotoxy(18,10);,程序代码,cputs(Wang Zhanhua); gotoxy(5,14); cputs(Add: Xili Lake,Shenzhen,P.R.C

5、hina); gotoxy(5,15); cputs(Post: 518055 E-mail: ); gotoxy(5,16); cputs(Tel:Fax:; getch(); window(1,1,80,25); /*恢复全屏幕窗口*/ textbackground(BLACK); /*恢复0号背景颜色*/ textcolor(7); /*恢复7号前景颜色*/ clrscr(); /*清屏,使设置的颜色生效*/ ,练一练,在问题11.1中,修改程序,使背景颜色为红色,字符为蓝色。并且闪烁显示姓名 “Wang Zhanhua”字符。

6、,11.2 图形显示技术的应用,学一学 1 图形系统的初始化 void far initgraph(int far *gdriver,int far *gmode, char far *path) 2. 常用画图函数 3 图形系统的关闭 void far closegraph(void);,常用画图函数,试一试,问题11.2 在屏幕上画一条直线. 【解题步骤】 1 对图形系统初始化; 2 调用画线函数line()画一条直线; 3关闭图形系统,将屏幕恢复为调用initgraph()之前的模式。,【程序代码】,#include graphics.h void main() int iDriver,

7、 iMode; detectgraph( ,问题11.3,在屏幕上画100条动态直线 【解题步骤】 1 对图形系统初始化; 2 构建循环,画100条动态直线,其中每条直线的两个端点坐标,利用随机函数产生; 3 关闭图形系统,将屏幕恢复为调用initgraph()之前的模式。,程序代码,void main() int i = 1, iDriver, iMode; detectgraph( ,问题11.4,在屏幕上,以(100,100)为圆心,50为半径,画一个圆 【解题步骤】 1 初始化图形系统; 2 画一个圆; 3 关闭图形系统,将屏幕恢复为调用initgraph()之前的模式。,程序代码,#

8、include graphics.h void main() int iDriver, iMode; detectgraph( ,练一练,1在屏幕上画一个椭圆。 2在屏幕上画一个圆,然后在圆内随机画100条直线。 3图11-5是一个由不同色彩的线段描绘的钻石线框图,请尝试完成。,提示:程序主要由四部分组成,(1)图形系统初始化; (2)计算各线段的端点坐标值,存储到数组x和y中 t=6.28318/23;r=200; for(i=0;i23;i+) xi=r*cos(i*t)+x0; yi=r*sin(i*t)+y0; (3)调用图形函数setcolor()、line(),按设定的前景色彩画线

9、 for(i=0;i=n-2;i+) setcolor(hh+1);hh %=14;hh+;if(hh=0)hh+; for(j=i+1;j=n-1;j+) line(xi,yi,xj,yj); (4)关闭图形系统,恢复文本模式。,问题11-5,给椭圆涂上颜色。 【解题步骤】 1 对图形系统初始化; 2 设置填充模式; 3 调用画椭圆函数画椭圆; 4关闭图形系统,将屏幕恢复为调用initgraph()之前的模式。,程序代码,#include void main() char *p; int iDriver, iMode; detectgraph( ,11.3 汉字显示技术及其应用,学一学 11

10、6点阵字模 字库中的汉字按1616点阵模式存储,每个汉字由1616=256个点组成,占用162=32个字节单元。字节的每一位(bit)表示一个点的属性(1有亮点,0无亮点)。 2 汉字的内码 汉字用内码表示,内码为两个字节。为了与西文兼容,汉字系统的内码必须同时允许ASCII码和汉字内码的使用,两者之间不应冲突,所以规定每个字节只用7位(bit),若两个字节的最高位均为1,则该字符为汉字。,3 读取汉字字模 设某个汉字内码为十六进制数aaff,则区号qh和位号wh分别为: qh = aa 0 xa0; wh = ff 0 xa0; 于是,该汉字在汉字库中的起始位置为(以字节为单位): offs

11、et = ( 94 * (qh-1)+(wh-1)*32L; 连续读取32个字节就是该汉字的字模。所以,由汉字内码,从汉字库中读取字模的可用以下函数实现。,读取字模函数。,Void fnGet_hzm(char cIncode,char cBytes) unsigned char qh, wh; unsigned long offset; qh = cIncode0 - 0 xa0; wh =cIncode1- 0 xa0; offset = ( 94 * (qh-1)+(wh-1)*32L; fseek(fp, offset, SEEK_SET); fread(cBytes , 1, 32

12、, fp); ,字模显示函数,void fnDisp_hzm(int iX,int iY,int iColor,char cBuf ) int i,j,k; for(i=0;i(7-k) ,汉字显示函数,void fnDisHz16X16(int iX,int iY,int iWidth,int iColor,char *pStr) unsigned char cBuf35; while(*pStr) if(*pStr ,试一试,问题11.6 将问题11.1的英文名片,替换为中文,并将背景设为蓝色,文字设为黄色, 【解题步骤】 1在例11.3的程序中添加fnGet_hzm(), fnDisp_

13、hzm( )和fnDisHz16X16( )子函数; 2打开汉字库; 3调用函数fnDisHz16X16( )显示汉字; 4关闭文件。,程序代码,void main() int GraphDrive,GraphMode,i; fp= fopen(hzk16.dot,rb); if(fp=NULL)exit(); detectgraph(,程序代码,setfillstyle(1,1); bar(10,10,400,320); fnDisHz16X16(20,15,4,14,2,3,cMain0); setcolor(14); outtextxy(120,100,Main1); fnDisHz16

14、X16(240,110,4,14,1,1,cMain2); fnDisHz16X16(60,80,4,14,2,2,王章华),程序代码,fnDisHz16X16(250,170,4,14,1,1,副教授); fnDisHz16X16(50,250,4,14,1,1,cMain3); outtextxy(50,280,cMain4); outtextxy(50,290,cMain5); fclose(fp); getch(); closegraph(); ,问题11.7,开发移动广告牌:深圳职业技术学院 【解题步骤】 1同问题11.6一样,定义fnGet_hzm(), fnDisp_hzm( )和fnDisHz16X16( )子函数; 2打开汉字库,进行图形系统初始化; 3设置填充模式; 4画长方条形图并着色,调用函数DisHz16X16( )显示汉字; 5修改广告牌的起点坐标,作时间停留

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论