#include <dos.h>
#include <stdlib.h>
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
REGS regs;
int init_mouse(int x_min,int x_max,int y_min,int y_max);
int read_mouse(int *x0,int *y0,int *butter);
void mouse(int x0,int y0,int color);
void main()
{
int gdriver,gmode;
gdriver=DETECT;
initgraph(&gdriver,&gmode,"");
setbkcolor(BLUE);
setcolor(RED);
if((init_mouse(2,638,2,478))==0)
{
outtextxy(300,230,"Can't init the Mouse!");
exit(1);
}
int x=0,y=0,butter=0;
setwritemode(XOR_PUT);
while(!kbhit())
{
read_mouse(&x,&y,&butter);
}
closegraph();
printf("a");
}
int init_mouse(int x_min,int x_max,int y_min,int y_max)
{
int recode;
regs.x.ax=0;
int86(0x33,&regs,&regs);
recode=regs.x.ax;
if(recode==0)
return 0;
regs.x.ax=7;
regs.x.cx=x_min;
regs.x.dx=x_max;
int86(0x33,&regs,&regs);
regs.x.ax=8;
regs.x.cx=y_min;
regs.x.dx=y_max;
int86(0x33,&regs,&regs);
return recode;
}
int read_mouse(int *x0,int *y0,int *butter)
{
int x1,y1,butter1;
int oldx,oldy;
char str[20];
do
{
regs.x.ax=3;
int86(0x33,&regs,&regs);
x1=regs.x.cx;
y1=regs.x.dx;
butter1=regs.x.bx;
}while((x1==*x0)&&(y1==*y0)&&(butter1==*butter));
mouse(*x0,*y0,YELLOW);
oldx=*x0;oldy=*y0;//oldbutter=*butter;
*x0=x1,*y0=y1,*butter=butter1;
mouse(*x0,*y0,YELLOW);
if(*butter==1)
{
setcolor(RED);
line(oldx,oldy,x1,y1);
}
setcolor(BLUE);
bar(0,0,100,10);
sprintf(str,"%d,%d",x1,y1);
outtextxy(0,0,str);
return 0;
}
void mouse(int x0,int y0,int color)
{
setcolor(color);
line(x0-3,y0,x0+3,y0);
line(x0,y0-3,x0,y0+3);
}
/*
鼠标操作感悟:
首先,进行鼠标驱动的安装,在成功安装鼠标驱动以后,这时候鼠标已经指向了屏幕上的一个默认
的位置,但不会显示,当这时你移动鼠标时,也会有变化,不过因为你没有在程序中显示鼠标的位置,
所以也就看不出来了;然后就是设置鼠标的X,Y轴的最大最小值,使鼠标不会指向超过这个范围的屏幕的位置;最后判断这时鼠标的状态用来和上次的鼠标状态计较看不同,然后做相应的处理。
*/