posts - 1,comments - 0,trackbacks - 0
#include "graphics.h" #include "stdlib.h" #include "stdio.h" #include "fcntl.h" #include "dos.h" union REGS r; struct MOUSE{ int getit; int x1; int y1; int x2; int y2; }ms; void MSB(float,float,float,float,int,int,int,int,int); void mouse_drop(struct MOUSE *in); /*定义鼠标拖动的函数,通过鼠标的按下、放开来选定一个矩形区域*/ int data_processor(struct MOUSE m,float *x0,float *x1,float *y0,float *y1); /*将鼠标选定的区域转化成MSB集的区域*/ void mouse_IQR(int *num,int *bx,int *cx,int *dx) {/*调用鼠标的中断,在这里定义函数让下面一些函数调用,以减少编程的重复, 在这里,通过int86函数(在dos.h里)调用中断,鼠标的中断号为:33h */ r.x.ax=*num; r.x.bx=*bx; r.x.cx=*cx; r.x.dx=*dx; int86(0x33,&r,&r); *bx=r.x.bx; *cx=r.x.cx; *dx=r.x.dx; *num=r.x.ax; } int init_mouse() { /*初试化鼠标,查询鼠标驱动有没有安装,功能号为 0 */ int num=0; mouse_IQR(&num,&num,&num,&num); if(num!=-1) return 1; else return 0; } void mouse_show(); void mouse_position(int *x,int *y) {/*鼠标在屏幕中所处的位置*/ int button=0,num=3; mouse_show(); mouse_IQR(&num,&button,x,y); } void mouse_hide() {/*隐藏鼠标光标*/ int num=2; mouse_IQR(&num,&num,&num,&num); } void mouse_show() {/*显示鼠标光标*/ int num=1; mouse_IQR(&num,&num,&num,&num); } int mouse_click(int k) {/*查询鼠标是使用左键(返回1)还是右键(返回2)*/ int bx=0,num=3; mouse_IQR(&num,&bx,&num,&num); return(bx&k); } void waiton(int buttom) {/*等待鼠标动作*/ if(buttom==1) while(mouse_click(1)); if(buttom==2) while(mouse_click(2)); } int mousexy(int x1,int y1,int x2,int y2) {/*查询鼠标是否在区域内*/ int x,y; mouse_position(&x,&y); if(x>x1&&xy1&&yL||m<-1e10) break; x=xx; y=yy; } color=n%16; putpixel(x1+i,y1+j,color); } } } void mouse_drop(struct MOUSE *in) { char out[20]; int x,y; int oldx,oldy; struct MOUSE r; r=*in; setwritemode(1); setlinestyle(USERBIT_LINE,0x7777,1); setcolor(15); if(r.getit==1) { mouse_hide(); rectangle(r.x1,r.y1,r.x2,r.y2); mouse_show(); } mouse_position(&x,&y); r.x1=x; r.y1=y; oldx=x; oldy=y; r.getit=1; mouse_hide(); rectangle(x,y,x,y); mouse_show(); while(mouse_click(1)) {mouse_position(&x,&y); if(oldx!=x || oldy!=y){ mouse_hide(); rectangle(r.x1,r.y1,x,y); rectangle(r.x1,r.y1,oldx,oldy); mouse_show(); oldx=x; oldy=y; } if(mouse_click(2)){ r.getit=0; mouse_hide(); rectangle(r.x1,r.y1,oldx,oldy); mouse_show(); waiton(2); break;} } if(r.getit==1){ r.x2=x; r.y2=y; if(x==r.x1 && r.y1==y) r.getit=0; else r.getit=1; } setlinestyle(SOLID_LINE,0,1); *in=r; waiton(1); setwritemode(0); setmouse(0,0,getmaxx(),getmaxy()); } int data_processor(struct MOUSE m,float *x0, float *x1,float *y0,float *y1) { float d1,l1,d2,l2,d,l; float xx0,xx1,yy0,yy1,x,y; d1=*x1-*x0; l1=*y1-*y0; d2=637; l2=477; xx0=m.x1; xx1=m.x2; yy0=m.y1; yy1=m.y2; if(xx0==xx1 || yy0==yy1) return(0); if(xx0>xx1) {x=xx0; xx0=xx1; xx1=x; } if(yy0>yy1) {x=yy0; yy0=yy1; yy1=x; } d=1; l=1; x=*x0; y=*y0; *x0=x+(xx0-d)*d1/d2; *x1=x+(xx1-d)*d1/d2; *y0=y+(yy0-l)*l1/l2; *y1=y+(yy1-l)*l1/l2; if(*x0==*x1 || *y0==*y1) return(0); else return(1); }
posted on 2007-05-01 03:11 悲惨的狼 阅读(251) 评论(0)  编辑 收藏 引用 所属分类: 基础
只有注册用户登录后才能发表评论。