【教学课件】第3章高级编程技术的实现.ppt
《【教学课件】第3章高级编程技术的实现.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第3章高级编程技术的实现.ppt(150页珍藏版)》请在三一办公上搜索。
1、第3章 高级编程技术的实现,操作手段显示方式图形绘制技术图像技术动画技术发声技术汉字显示技术精确的时间控制技术,1,第3章 高级编程技术的实现,操作手段:键盘,在键盘内有一个微处理器,用来扫描和检测每个键的按下和抬起状态,然后以程序中断(INT 9H)的方式与主机通信,向主机传送一个字节的按键扫描码。接着ROM中BIOS内的键盘中断处理程序,将按键扫描码翻译成对应的ASCII码或扩充的ASCII码,存放在AX寄存器中。,原理,2,第3章 高级编程技术的实现,操作手段:键盘,方法,方法一:直接使用声明在bios.h中的库函数bioskey();方法二:通过库函数int86(),调用BIOS的IN
2、T 16H、功能 号为0的中断。它将按键的扫描码存放在AH寄存器 中;方法三:简单地利用声明在conio.h中的库函数kbhit()。,3,第3章 高级编程技术的实现,操作手段:键盘,方法一,int bioskey(int cmd);/*参数cmd用来确定函数如何操作*/,cmd=0bioskey()返回按健的键值,该值是2个字节的整型数。若没有键按下,则该函数一直等待,直到有键按下。当按下时,若返回值的低8位为非零,则表示为普通键,其值代表该键的ASCII码。若返回值的低8位为0,则高8位表示为扩展的ASCII码,表示按下的是特殊功能键,4,第3章 高级编程技术的实现,操作手段:键盘,方法一
3、,int bioskey(int cmd);/*参数cmd用来确定函数如何操作*/,cmd=1bioskey()查询是否有键按下。若返回非0值,则表示有键按下,若为0表示没键按下。,5,第3章 高级编程技术的实现,操作手段:键盘,方法一,int bioskey(int cmd);/*参数cmd用来确定函数如何操作*/,cmd=2bioskey()将返回一些控制键是否被按过,按过的状态由该函数返回的低8位的各位值来表示:字节位 对应的16进制数含义 0 0 x01右边的shift键被按下 1 0 x02 左边的shift键被按下 2 0 x04Ctrl键被按下 3 0 x08 Alt键被按下 4
4、 0 x10 Scroll Lock已打开 5 0 x20Num Lock已打开 6 0 x40Caps Lock已打开 7 0 x80 Insert已打开,6,第3章 高级编程技术的实现,操作手段:键盘,方法二,/*读键函数,返回扫描码*/int getKeySCode()union REGS rg;rg.h.ah=0;int86(0 x16,7,键盘扫描码表见课程主页,第3章 高级编程技术的实现,操作手段:键盘,方法三,int kbhit(void);若按了键盘,该函数返回值1,否则返回值0。,8,第3章 高级编程技术的实现,操作手段:鼠标,DOS操作系统和Turbo C 2.0并不支持鼠
5、标器的操作。要操纵鼠标器,首先必须安装相应的鼠标驱动程序。鼠标驱动程序由生产鼠标的厂家提供,它提供了许多鼠标操作的功能。这些功能可以通过INT 33H鼠标中断调用来使用。,原理,9,第3章 高级编程技术的实现,操作手段:鼠标常用功能,/*显示鼠标器光标*/void cursorOn()union REGS r;struct SREGS s;1;/*1号鼠标器功能:显示鼠标光标*/msvisibleTRUE;int86x(0 x33,&r,&r,&s);,10,第3章 高级编程技术的实现,/*关闭鼠标器光标*/void cursorOff()union REGS r;struct SREGS s
6、;2;/*2号鼠标器功能:不显示鼠标光标*/msvisibleFALSE;int86x(0 x33,&r,&r,&s);,操作手段:鼠标常用功能,11,第3章 高级编程技术的实现,/*设定鼠标光标的初始位置*/void cursorXY(unsigned int x,unsigned int y)union REGS r;struct SREG s;r.x.ax=4;/*4号鼠标器功能:设置鼠标光标位置*/r.x.cx=x;/*设定光标x坐标*/r.x.dx=y;/*设定光标y坐标*/int86x(0 x33,,操作手段:鼠标常用功能,12,第3章 高级编程技术的实现,/*报告鼠标器当前光标位
7、置和当前按键状态*/void mouseRead()union REGS rl,r2;struct SREGS s;r1.x.ax=3;/*3号鼠标器功能:取按钮状态和鼠标位置*/int86x(0 x33,/*鼠标器按健状态*/,操作手段:鼠标常用功能,13,第3章 高级编程技术的实现,/*等待鼠标器的某种状态*/void wait(int i)do mouseread();while(mousekey=i);,操作手段:鼠标常用功能,14,第3章 高级编程技术的实现,操作手段显示方式图形绘制技术图像技术动画技术发声技术汉字显示技术精确的时间控制技术,15,第3章 高级编程技术的实现,显示方式
8、:显示系统,显 卡,16,第3章 高级编程技术的实现,显示方式:显示系统,常见显卡及其模式,17,第3章 高级编程技术的实现,显示方式:显示系统,显示器工作方式,显示器有两种工作方式,即文本显示方式和图形显示方式,它们的主要差别是显示存储器(VRAM)中存的信息不同。文本方式时,VRAM存放要显示字符的ASCII码,用它作为地址,取出字符发生器ROM中存放的相应字符的图像变成视频信号在显示器屏幕上进行显示。图形方式时,则要显示的图形的图像直接存在VRAM中,VRAM中某地址单元存放的数就表示了相应屏幕上某行和列上的像素及颜色。,18,第3章 高级编程技术的实现,显示方式:,也称作字符显示方式,
9、是Turbo C确省的显示方式。文本方式屏幕的最大分辨单位是单个字符,字符显示的位置用行和列坐标来表示。,文本方式,19,第3章 高级编程技术的实现,显示方式:文本方式方式设定,Turbo C支持的几种文本显示方式可以用下面的函数来设置:void textmode(int newmode);。,20,第3章 高级编程技术的实现,显示方式:文本方式颜色设置,21,第3章 高级编程技术的实现,显示方式:文本方式窗口设置,Turbo C确省定义的文本窗口为整个屏幕。用户可以通过函数:void window(int left,int top,int right,int bottom);定义屏幕上的一个
10、矩形域作为窗口。参数(left,top)是窗口左上角所在的屏幕坐标,(right,bottom)是窗口的右下角所在的屏幕坐标。窗口定义之后,用有关窗口的输入输出函数就可以只在此窗口内进行操作而不超出窗口的边界。另外,一个屏幕可以定义多个窗口,但现行窗口只能有一个。,22,第3章 高级编程技术的实现,显示方式:文本方式窗口操作,窗口内文本输出函数:int cprintf(char*format,表达式表);int cputs(char*str);int putch(int ch);/*这三个函数受窗口的控制,窗口内显示光标的位置就是它们开始输出的位置。当输出行超过窗口右边界或输出到窗口底部边界时
11、,会自动转到窗口内的下一行输出或自动上卷窗口内的内容继续输出*/光标操作函数:void gotoxy(int x,int y);/*把光标移到窗口(x,y)处*/,23,第3章 高级编程技术的实现,显示方式:文本方式屏幕操作,清屏函数:void clrscr(void);/*清除窗口文本,光标移到(1,1)*/void clreol(void);/*清除窗口从光标位置开始到本行 结尾的所有字符,但光标不变*/void delline(void);/*删除当前窗口的当前行*/,24,第3章 高级编程技术的实现,显示方式:文本方式屏幕操作,屏幕文本移动函数:void movetext(int x1
12、,int y1,int x2,int y2,int x3,int y3);屏幕文本存取函数void gettext(int x1,int y1,int x2,int y2,void*buffer);void puttext(int x1,int y1,int x2,int y2,void*buffer);,25,第3章 高级编程技术的实现,显示方式:文本方式,编制一个程序,将屏幕垂直平分成两个窗口,左边窗口为蓝色背景,白色前景,右边窗口为绿色背景,红色前景。两个窗口都设计为文本输入,即在窗口中可以输入文字,在窗口屏幕中显示出来。使用tab键在左右两个窗口中切换,每个窗口都有光标,活动窗口光标进
13、行闪烁。,应用实例,问题描述,26,第3章 高级编程技术的实现,显示方式:文本方式,首先用文本窗口函数window(int x1,int y1,int x2,int y2)画出两个窗口,用textcolor(int color),textbackground(int color),clrscr(void)等进行窗口属性的设置。用tab键进行两个窗口间的循环切换,在每次切换前先调用gettext(int left,int top,int right,int bottom,void*buf)函数把当前矩形窗口上的字符拷贝到由buf所指向的内存中,在切换到另一个窗口后调用puttext(int le
14、ft,int top,int right,int bottom,void*buf)把先前存储在该窗口buf所指向的内存中的字符拷贝到当前窗口中,并用gotoxy(int x,int y)把光标移到原先所在位置,因此可以接着先前的文本继续编辑。,应用实例,设计思想,27,第3章 高级编程技术的实现,显示方式:文本方式,应用实例,程序运行截图,28,第3章 高级编程技术的实现,显示方式:,图形方式,图形显示方式可以满足在屏幕上作图的要求。在此方式下,屏幕显示的单位是像素。屏幕显示的像素大小(分辨率)可以通过设置不同的显示方式来改变。像素在屏幕上的位置可由其所在的x,y坐标来决定。此时,屏幕的坐标系
15、统就象一个倒置的直角坐标系。,29,第3章 高级编程技术的实现,显示方式:图形方式方式设定,图形系统的初始化:用什么类型的显卡的驱动程序采用什么模式的图形方式适配器驱动程序的寻找路径名。注意:所用系统的卡一定要支持所选用的显示模式,否则将出错。,30,第3章 高级编程技术的实现,显示方式:图形方式方式设定,图形系统的初始化函数:void far initgraph(int far*pdriver,int far*pmode,char far*ppath_for_driver);,31,第3章 高级编程技术的实现,显示方式:图形方式方式设定,图形系统的初始化函数:void far initgra
16、ph(int far*pdriver,int far*pmode,char far*ppath_for_driver);,32,第3章 高级编程技术的实现,显示方式:图形方式方式设定,图形系统检测函数:void far detectgraph(int far*pdriver,int far*pmode);完成对适配器的检查并得到显示器类型号和相应的最高分辨率模式,将graphdriver设成DETECT,initgraph()将调用detectgraph()自动检测所用显卡类型,并将相应的驱动程序装入,并将其最高的显示模式作为当前显示模式。int graphdriver=DETECT,grap
17、hmode;initgraph(,33,第3章 高级编程技术的实现,显示方式:图形方式方式设定,清屏函数:画图前一般需清除屏幕,使得屏幕如同一张白纸,以画最新最美的图画。void far cleardevice(void);图形系统的关闭:当画图结束时可以通过调用关闭图形系统的函数:void far closegraph(void);使显示器恢复到调用initgraph()函数之前的文本方式。,34,第3章 高级编程技术的实现,显示方式:图形方式颜色设置,前景色设置函数:void far setcolor(int color);背景色设置函数:void far setbkcolor(int c
18、olor);,35,第3章 高级编程技术的实现,显示方式:图形方式颜色设置,前景色设置函数:void far setcolor(int color);背景色设置函数:void far setbkcolor(int color);,36,第3章 高级编程技术的实现,显示方式:图形方式颜色设置,CGA前景色的取值:,37,第3章 高级编程技术的实现,显示方式:图形方式颜色设置,CGA背景色的取值:,38,第3章 高级编程技术的实现,显示方式:图形方式颜色设置,EGA/VGA调色板:,64/256色选一,39,第3章 高级编程技术的实现,显示方式:图形方式颜色设置,EGA/VGA调色板:,单色设置:
19、voidfar setpalette(int index,int actual_color);,40,第3章 高级编程技术的实现,显示方式:图形方式颜色设置,EGA/VGA标准色:,41,第3章 高级编程技术的实现,显示方式:图形方式图视口,设置函数:void far setviewport(int xl,int y1,int x2,int y2,clipflag);其中(x1,y1)为图视口的左上角所在的原屏幕物理坐标,(x2,y2)为右下角所在的原屏幕物理坐标。clipflag参数clipflag若为0,则超出图视口的图形部分仍将显示出来;否则,超出图视口的部分将被切除而不显示。清除函数:
20、void far clearviewport(void),42,第3章 高级编程技术的实现,显示方式:图形方式文本输出,当前位置文本输出函数:void far outtext(char far*textstring);定位文本输出函数:void far outtextxy(int x,int y,char far*textstring);文本输出字符串函数 int sprintf(char*string,char*format,argument,);,43,第3章 高级编程技术的实现,显示方式:图形方式文本输出,文本输出位置函数:void far settextjustify(int hori
21、z,int vert);,44,第3章 高级编程技术的实现,显示方式:图形方式文本输出,定义文本字型函数:void far settextstyle(int font,int direction,int char size);,45,第3章 高级编程技术的实现,#include main()int i,graphdriver,graphmode,size,page;char s30;graphdriver=DETECT;initgraph(,应用实例,程序源代码,settextstyle(SMALL_FONT,HORIZ_DIR,2);settextjustify(LEFT_TEXT,0);o
22、uttextxy(220,80,Smallfont);settextstyle(SANS_SERIF_FONT,HORIZ_DIR,2);settextjustify(LEFT_TEXT,0);outtextxy(220,110,Sans serif font);settextstyle(GOTHIC_FONT,HORIZ_DIR,2);settextjustify(LEFT_TEXT,0);outtextxy(220,140,gothic font);getch();closegraph();,显示方式:图形方式文本输出,46,第3章 高级编程技术的实现,应用实例,程序输出,显示方式:图形方
23、式文本输出,47,第3章 高级编程技术的实现,操作手段显示方式图形绘制技术动画技术发声技术汉字显示技术图像技术精确的时间控制技术,48,第3章 高级编程技术的实现,图形绘制,void far moveto(int x,int y);移动画笔到指定的(x,y)位置,移动过程不画。void far moverel(int dx,int dy);画笔从现行位置(x,y)处移到一位置增量处(x+dx,y+dx),移动过程不画:int far getx(void);得到当前画笔的x位置int far gety(void);得到当前画笔的y位置,:画笔定位,49,第3章 高级编程技术的实现,图形绘制,画点
24、函数:void far putpixel(int x,int y,int color);该函数表示在指定的x,y位置画一点,点的显示颜色由设置的color值决定。int far getpixel(int x,int y);该函数与putpixel()相对应,它得到在(x,y)点位置上的像素的颜色值,:点和线,50,第3章 高级编程技术的实现,图形绘制:点和线,画线函数:void far line(int x0,int y0,int x1,int y1);该函数从(x0,y0)点到(x1,y1)点画一直线。void far lineto(int x,int y);该函数将从现行画笔位置到(x,y
25、)点画一直线。void far linerel(int dx,int dy);该函数将从现行画笔位置(x,y)到位置增量处(x+dx,y+dy)画一直线。,51,第3章 高级编程技术的实现,线类型的设置:在确省的情况下,画线函数画出的线都是一个像素点宽的细实线。也可以在画线之前通过函数:void far setlinestyle(int linestyle,unsigned upattern,int thickness);定义线的类型和粗细。,setlinestyle(4,0 xF3D0,1)设置的线型,图形绘制:点和线,52,第3章 高级编程技术的实现,BIOS的10H中断负责显示器服务,该
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 高级 编程 技术 实现
链接地址:https://www.31ppt.com/p-5658679.html