C语言鼠标编程的问题,高手指教~~
voidmouse_act(int*mx,int*my,int*button){read(mx,my,button);//更新鼠标坐标cursor(*mx,*my);//...
void mouse_act(int *mx,int *my,int *button) { read(mx,my,button); //更新鼠标坐标 cursor(*mx,*my); //画出鼠标 } 这是我程序中实现鼠标运动的函数,通过刷新鼠标坐标来实现运动,但是这样会留下鼠标运动的痕迹,请问怎样才能不留下这些痕迹呢?
展开
展开全部
//这是以前写过的,没有什么问题 //有什么不明白的再问我 #include <graphics.h> #include <dos.h> #include <conio.h> #define BKcolor 9 /*背景色*/ int mousesave[18],mouse[18]; int mouseX[2],mouseY[2]; void mousecolor(int Color) {int i; for(i=0;i<18;i++) mouse[i]=Color; } void mouseon(int x,int y) /*显示鼠标*/ { int i; for(i=0;i<5;i++) /*保存原背景*/ mousesave[i]=getpixel(x+i,y); for(i=1;i<5;i++) mousesave[i+4]=getpixel(x,y+i); for(i=1;i<10;i++) mousesave[i+8]=getpixel(x+i,y+i); for(i=0;i<5;i++) /*画鼠标*/ putpixel(x+i,y,mouse[i]); for(i=1;i<5;i++) putpixel(x,y+i,mouse[i+4]); for(i=1;i<10;i++) putpixel(x+i,y+i,mouse[i+8]); } void mouseoff() /*消失鼠标 */ { int i,x,y; x=mouseX[0];y=mouseY[0]; for(i=0;i<5;i++) /*画原背景*/ putpixel(x+i,y,mousesave[i]); for(i=1;i<5;i++) putpixel(x,y+i,mousesave[i+4]); for(i=1;i<10;i++) putpixel(x+i,y+i,mousesave[i+8]); } void mousereset() /*(可选)鼠标状态值初始化*/ { _AX=0x00; geninterrupt(0x33); /*0x33是DOS中断,是在DOS下通过调用中断来对鼠标进行操作.*/ } void mousesetX(int lx,int rx) /*设置鼠标左右边界 lx:左边界 gx:右边界 */ { _CX=lx;_DX=rx;_AX=0x07; geninterrupt(0x33); } void mousesetY(int uy,int dy) /*设置鼠标上下边界 uy:上边界dy:下边界 */ { _CX=uy;_DX=dy;_AX=0x08; geninterrupt(0x33); } void mousesetXY(int x,int y) /*设置鼠标当前位置 x:横向坐标y:纵向坐标 */ { _CX=x;_DX=y;_AX=0x04; geninterrupt(0x33); } void mousespeed(int vx,int vy) /*设置鼠标速度(缺省值:vx=8,vy=1) 值越大速度越慢 */ { _CX=vx;_DX=vy;_AX=0x0f; geninterrupt(0x33); } int leftpress() /*是否按下左键 返回值: 1=按下 0=释放*/ { _AX=0x03; geninterrupt(0x33); return(_BX&1); } int middlepress() /*是否按下中键 返回值同上 */ { _AX=0x03; geninterrupt(0x33); return(_BX&4); } int rightpress() /*是否按下右键 返回值同上 */ { _AX=0x03; geninterrupt(0x33); return(_BX&2); } void mousegetXY(int x) /*获取鼠标当前位置*/ { _AX=0x03; geninterrupt(0x33); mouseX[x]=_CX; mouseY[x]=_DX; } int mousemove() /*鼠标移动;*/ { int i,j,x,y,color,move; x=mouseX[0]; y=mouseY[0]; move=0; /*没移动标志*/ mousegetXY(0); if(mouseX[0]!=x||mouseY[0]!=y) move=1; /*有移动*/ mouseX[0]=x; mouseY[0]=y; return move; } void main() {int gdrive=DETECT,gmode; initgraph(&gdrive,&gmode,""); setbkcolor(BKcolor); /*填背景色*/ mousesetY(0,getmaxy()); /*设置鼠标纵轴移动范围*/ mousesetX(0,getmaxx()); /*设置鼠标横轴移动范围*/ mousesetXY(319,239); /*初始鼠标位置*/ mousecolor(15); while(!kbhit()) { if(mousemove()) /*mousemove() 鼠标移动;*/ { mouseoff(); /*消失鼠标 */ mousegetXY(0); /*获取鼠标当前位置*/ mouseon(mouseX[0],mouseY[0]); /*显示鼠标*/ } } getch(); closegraph(); }
满意请采纳
满意请采纳
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询