Grafik kullanıyorsan dos icinse mouse.h kütüphanesi kullanilir. Konsolda fareyi kullanabilmek icin Turbo Vision kullanman gerekli. Fakat Konsolda mouse.h ( pek kullanılmayan bir kütüphane ) sorunlar cıkarabiliyor sürekli olarak. outtext, outtextxy kullanarak belki düzelebilir.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
union REGS reg;
int X,Y,Xo,Yo,R,B,Bo;//,a0,b0;
void *Head_Buf;
int ply[14];
int gggprintf( int xloc, int yloc, char *fmt, ... )
{
va_list argptr;
char str[14];
int cnt;
va_start( argptr,fmt );
cnt = vsprintf( str, fmt, argptr );
outtextxy( xloc, yloc, str );
va_end( argptr );
return( cnt );
}
void Show_Mouse(void)
{ reg.x.ax=1;
int86(0x33,®,®);
}
void Hide_Mouse(void)
{ reg.x.ax=0;
int86(0x33,®,®);
}
void Set_Mouse_Sens(int B,int C,int D)
{ reg.x.ax=0;
reg.h.al=0x1a;
reg.x.bx=B;
reg.x.cx=C;
reg.x.dx=D;
int86(0x33,®,®);
}
void Set_Mouse_Coor(int XCoor,int YCoor)
{ reg.x.ax=0;
reg.h.al=4;
reg.x.cx=XCoor;
reg.x.dx=YCoor;
int86(0x33,®,®);
}
char Get_Button(int *B,int *XCoor,int *YCoor)
{ reg.x.ax=0;
reg.h.al=3;
int86(0x33,®,®);
*XCoor=reg.x.cx;
*YCoor=reg.x.dx;
if (reg.x.bx&1&®.x.bx&2) *B=3;
else if (reg.x.bx&1) *B=1;
else if (reg.x.bx&2) *B=2;
else *B=0;
return *B;
}
void Set_Mouse_Range(int Xmin,int Ymin,int Xmax,int Ymax)
{ reg.x.ax=0;
reg.h.al=7;
reg.x.cx=Xmin;
reg.x.dx=Xmax;
int86(0x33,®,®);
reg.x.ax=0;
reg.h.al=8;
reg.x.cx=Ymin;
reg.x.dx=Ymax;
int86(0x33,®,®);
}
void Put_Head(int x,int y,char r)
{ if (!r)
putimage(x,y,Head_Buf,0);
else { getimage(x,y,x+8,y+8,Head_Buf);
setcolor(r);
setfillstyle(SOLID_FILL,r);
ply[0]=x; ply[1]=y;
ply[2]=x; ply[3]=y+6;
ply[4]=x+2; ply[5]=y+3;
ply[6]=x+5; ply[7]=y+7;
ply[8]=x+2; ply[9]=y+3;
ply[10]=x+6;ply[11]=y+3;
ply[12]=x; ply[13]=y;
fillpoly(6,ply);
}
}
Örnek bir mouse.h calismasi yukardaki kodlar zaten alakasız bir bicimde verilmiş cünkü modullu bir programdir.