《《图形操作简介》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《图形操作简介》PPT课件.ppt(34页珍藏版)》请在金锄头文库上搜索。
1、图形操作简介必要的头文件必须的系统变量初始化图形界面初始化出错处理取得必须的信息关闭图形界面一些常用的画图函数必要的头文件#include #include #include #include #include 必须的变量int GraphDriver;int GraphMode;double AspectRatio;int MaxX, MaxY;int MaxColors;int ErrorCode;struct palettetype palette;初始化图形界面 GraphDriver = DETECT; initgraph(&GraphDriver,&GraphMode, ); in
2、itgraph(&GraphDriver,&GraphMode, ”d:tc );初始化出错处理 ErrorCode = graphresult(); if( ErrorCode != grOk ) printf( Graphics System Error: %sn, grapherrormsg( ErrorCode ) ); exit( 1 ); 取得必须的参数 getpalette( &palette ); MaxColors = getmaxcolor( ) + 1; MaxX = getmaxx( ); MaxY = getmaxy( );AspectRatio = (double)
3、xasp / (double)yasp;关闭图形界面 closegraph(); /* Return the system to text mode */一些常用的画图函数outtext( buffer ),outtextxy(x,y,buffer)line(x0,y0,x1,y1);linerel( );lineto( )circle(int x, int y, int radius); arc( )bar(int l, int t, int r, int b); bar3d( );moveto(int x, int y);moverel(dx,dy);getx( )putpixel(x,y
4、,color); getpixel(x,y)setcolor();setbkcolor();getcolor();getbkcolor鼠标操作鼠标简介鼠标驱动程序的主要功能鼠标功能调用方法鼠标的初始化鼠标光标的显示与隐藏读取按钮状态,读取或设置光标位置设置鼠标的光标形状和移动范围鼠标简介 鼠标系统实际上由两个主要元素组成:鼠标机制和称作鼠标驱动程序的内存驻留程序。鼠标驱动程序提供与鼠标通信所需的全部低级支持。此外,它自动维持鼠标光标位置和发现是否按下了某个键。一旦装入驱动程序,鼠标就可以被随后执行的任意程序使用。鼠标简介 可以通过PC中断33H访问鼠标和鼠标驱动程序的各种功能。所选择的特定函数
5、依赖于中断时AX寄存器的值。三个其它寄存器(BX、CX和DX)用于把各种参数传送给鼠标例程。同样,鼠标函数使用这四个寄存器把鼠标的位置和按钮的状态返回给调用函数。鼠标驱动程序主要功能鼠标驱动程序主要功能鼠标功能调用方法 用TC通过INT33H中断来编制基本函数,有三种常用方法:嵌入汇编程序,如:ASM CLI清中断利用全程变量赋予寄存器值,然后通过函数geninterrupt( )调用中断实现利用联合类型REGS,SREGS通过函数int86(),int86x()调用中断,原型在dos.h鼠标的初始化InitMouse() union REGS regs; regs.x.ax=0; int86
6、(0x33,®s,®s); if(regs.x.ax=0) return false;else return true;鼠标光标的隐藏HideCur() union REGS regs; if(visual) regs.x.ax=2; int86(0x33,®s,®s); visual=false;鼠标光标的显示ShowCur() union REGS regs; if(!visual) regs.x.ax=1; int86(0x33,®s,®s); visual=true;鼠标光标的显示与隐藏 在鼠标驱动程序中,鼠标的显示状态用0值表示,隐藏用负值表示,每
7、调用一次显示功能则该值加一,每调用一次隐藏功能,则该值减一。这样,在多次调用了驱动程序的隐藏鼠标光标功能后,再调用显示鼠标光标功能时,将不能正常显示鼠标光标。需要加入一个visual布尔型变量,来取代驱动程序中的数值。读取鼠标的状态Status( ) union REGS regs; regs.x.ax=3; int86(0x33,®s,®s);x=regs.x.cx; y=regs.x.dx;status=regs.x.bx;读取鼠标的状态其中X,Y为光标位置status&1左键状态,1为按下,0为未按status&2右键状态,1为按下,0为未按status&4中键状态,1为按下
8、,0为未按 要注意循环检测时的抖动现象,可增加一些空循环或延时来清除剩余的按键信号。设置光标位置void MoveMouse(int x,int y) REGS regs; regs.x.ax=4; regs.x.cx=x; regs.x.dx=y; int86(0x33,®s,®s);设置鼠标光标形状设置鼠标光标需要三个方面信息:鼠标的外边界:8*8点阵,16个整数鼠标的内部形状:8*8点阵,16个整数以及鼠标的热点的相对坐标:int x,y其中外边界和内边界连续存放,为长度为32的整型数组 int marks32设置鼠标光标形状SetCurs(unsigned masks32,
9、x,y) union REGS regs; struct SREGS sregs;regs.x.ax=9; regs.x.bx=x; regs.x.cx=y;/* hot spot*/ regs.x.dx=(unsigned)masks; segread(&sregs); int86(0x33,®s,®s);手的光标数据 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, /*cu
10、rsor mask*/ 0x0c00, 0x1200, 0x1200, 0x1200, 0x13fe, 0x1249, 0x1249, 0x1249, 0x7249, 0x9001, 0x9001, 0x9001, 0x8001, 0x8001, 0x4002, 0x3ffc /*cursor mask*/4,0 /*hot spot*/设置鼠标的移动范围SetMouseArea(int x0,int y0,int x1,int y1) union REGS regs;regs.x.ax=7;regs.x.cx=x0;regs.x.dx=x1;int86(0x33,®s;®s);r
11、egs.x.ax=8;regs.x.cx=y0;regs.x.dx=y1;int86(0x33,®s,®s);西文状态下汉字的显示汉字库简介取得字节的某一位显示24点阵汉字显示16点阵汉字在字库中取字模汉字库简介 程序中可直接使用UCDOS中的HZK16,ASC16和HZK24三个文件。HZK16中存储的是16*16点阵汉字是按行存储的以便于显示,每个汉字字模32BYTE,按照国标码顺序存储,其中也包含了682个纯中文符号字母。汉字库的情况ASC16存储256个西文ASCII码的8*16点阵格式,按行存储,每个ASCII码16字节。HZK24X存储24*24点阵打印字模,按列存储,
12、每个汉字字模占576字节。24*24点阵汉字存储两比较大,所以从16区1位“啊”字开始存储,以减少字库大小。其中X为KS表示楷体,宋体等。取得字节某一位的值int getbit(unsigned char byte,int bit) if(bit7)return 0; return (bytebit)&0x1;函数getbit用于得出一个字节中每个位(bit)是0还是1。显示24点阵的汉字void PutChn24(x,y,char *by,color) int i1,i2,i3; for(i1=0;i124;i1+) /LINES for(i2=0;i23;i2+) /3 bytes per
13、 line for(i3=0;i38;i3+)f(getbit(byi1*3+i2,7-i3) putpixel(x+i1,y+(i2*8+i3),color);显示16点阵的汉字void PutChn16(x,y,char* buf,color) int i1,i2,i3; for(i1=0;i116;i1+) for(i2=0;i22;i2+) for(i3=0;i38;i3+)if(getbit(bufi1*2+i2,7-i3) putpixel(x+i2*8+i3,y+i1,color);在字库中找字模 qu= c1 - 0xa1; wei= c2 - 0xa1;通过计算个计算出该区位
14、码在汉字库中的偏移量:lenth = 32long offset=(qu) * 94 + wei) * (long) lenth;24*24点阵汉字字模的读取类似,只是其偏移量计算稍有不同:lenth=72long offset=(qu-15)* 94+ wei)* (long) lenth;DOS下如何发声在dos.h下,有如下三个函数可以处理声音:sound (long freq):发出特定频率的声音nosound( ):停止发声delay( ):延时特定时间良好的程序设计风格使用有意义的变量名匈牙利式命名法文档的模块化组织(缩进、对齐)自顶向下的设计方法增加程序的可读性(增加注释)不要滥用语言技巧