鼠标操作程序

发布时间 : 星期六 文章鼠标操作程序更新完毕开始阅读

#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这个来初始图形*/ if(graphresult())/*若调用不成功,退出*/ {printf(\调用失败!\\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); retcode=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(0x33,®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=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);} 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=\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(str,\setcolor(WHITE);

联系合同范文客服:xxxxx#qq.com(#替换为@)