《C语言鼠的操作函数集.docx》由会员分享,可在线阅读,更多相关《C语言鼠的操作函数集.docx(4页珍藏版)》请在三一办公上搜索。
1、C语言鼠的操作函数集C语言的鼠标操作函数集 #include #include #include #include union REGS regs; int X_max,Y_max,x_max,y_max; void Initgr(void) /*屏幕初始化成图形模式*/ int w,h,grdriver=DETECT,grmode; registerbgidriver(EGAVGA_driver); initgraph(&grdriver,&grmode,);/*在双引号中可加你tc放的路径,但要在tc里有EGAVGA.BGI这个来初始图形*/ i f(graphresult)/*若调用不成
2、功,退出*/ printf(n 调用失败!n); exit(1); X_max=getmaxx;/*求横向象点坐标数*/ Y_max=getmaxy;/*求纵向象点坐标数*/ getaspectratio(&w,&h);/*求纵横比*/ x_max=1000; /*设置屏幕坐标的宽度*/ y_max=x_max*(float)Y_max*h/(float)X_max*w); int Msinit(int Xlo,int Xhi,int Ylo,int Yhi)/*鼠标初始化*/ int retcode; regs.x.ax=0;/*初始化鼠标*/ int86(0x33,s,s); retcod
3、e=regs.x.ax; if(retcode=0) return 0; regs.x.ax=7;/*设置鼠标X方向的移动范围*/ regs.x.cx=Xlo; regs.x.dx=Xhi; int86(0x33,s,s); regs.x.ax=8;/*设置鼠标Y方向的移动范围*/ regs.x.cx=Ylo; regs.x.dx=Yhi; int86(0x33,s,s); regs.x.ax=15;/*设置mickey与象素的比,这各会影响鼠标移动速度*/ regs.x.cx=(int)(x_max/X_max); regs.x.dx=(int)(y_max/Y_max); int86(0x
4、33,s,s); return retcode; int Msread(int *px,int *py,int *pbuttons)/*读鼠标位置及状态*/ static int x0=320,y0=240,but0=0; int xnew,ynew,ch; do if(kbhit) ch=getch; if(ch=13) *pbuttons=1; return -1; else return ch; /*返回键盘输入*/ regs.x.ax=3; /*调用功能3,读鼠标位置及状态*/ int86(0x33,s,s); xnew=regs.x.cx;/*返回鼠标当前的位置的X坐标*/ ynew
5、=regs.x.dx;/*返回鼠标当前的位置的Y坐标*/ *pbuttons=regs.x.bx;/*返回鼠标当前的状态*/ while(xnew=x0&ynew=y0&*pbuttons=but0); /*当鼠标状态改变或位置改变终止循环*/ but0=*pbuttons;/*将鼠标状态保存到静态变量中*/ x0=xnew;y0=ynew;/*将鼠标位置保存到静态变量中*/ *px=xnew;*py=(int)(y_max-ynew); return -1; int Xpixel(int x)/*由象素坐标变换为屏幕坐标*/ return (int)(long)X_max*x/x_max);
6、 int Ypixel(int y) return Y_max-(int)(long)Y_max*y/y_max); void Cursor(int x,int y) /*显示十字光标*/ int X=Xpixel(x),Y=Ypixel(y),color; char *str= 0; line(X-8,Y,X-3,Y); line(X,Y-8,X,Y-4); line(X+3,Y,X+8,Y); line(X,Y+4,X,Y+8); color=getcolor; setcolor(BLACK); outtextxy(X_max-100,10,str);/*删除前次显示值*/ sprintf
7、(str,%d,%d,x,y); setcolor(WHITE); outtextxy(X_max-100,10,str);/*在屏幕右上角显示当前光标的坐标*/ setcolor(color); Void main int buttons,X,Y,x,y,a,b; char i; Initgr;/*初始化图形屏幕*/ setcolor(EGA_LIGHTRED);/*设置屏幕前景色*/ line(1,1,X_max-1,1); /*在屏幕四周画一矩形*/ line(1,1,1,Y_max-1); line(X_max-1,1,X_max-1,Y_max-1); line(1,Y_max-1,
8、X_max-1,Y_max-1); setcolor(EGA_WHITE); printf(没n 按鼠标右键终止程序n); printf( 然后按任意键退出); setwritemode(XOR_PUT);/*设置屏幕输出模式*/ Msinit(0,(int)x_max,0,(int)y_max);/*初始化鼠标*/ a=x_max;b=y_max; x=0; Cursor(a,b); /*在a=x_max;b=y_max;处画指针*/ while(x!=2) Msread(&X,&Y,&x); Cursor(a,b); /*删除之前的鼠标,因为屏幕输出模式的关系*/ if(x=1) a=(int)(X*1.0/x_max*X_max); b=(int)(y_max-Y)*1.0/y_max*Y_max); circle(a,b,1); /*画点*/ Cursor(X,Y); a=X;b=Y; Cursor(X,Y);/*再调用一次把原来的指针削掉*/ getch; closegraph;