//这是以前写过的,没有什么问题 //有什么不明白的再问我 #include <graphicsh> #include <dosh> #include <conioh> #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(); }
按钮也是窗口,因此当鼠标移动到按钮上面后WM_MOVE消息就只发送给按钮而不会发送给CTOOLTESTView窗口因此在CTOOLTESTView::OnMouseMove里面是捕捉不到按钮上面的鼠标移动消息的,Picture Control控件在Notify属性为FALSE的情况下鼠标消息是可以穿透的,而按钮控件没有这个功能。如果一定要使用按钮控件,可以在CTOOLTESTView
使用定时器的办法,比如定时时间间隔为10毫秒,每10毫秒检测一次鼠标的位置(使用API GetCursorPos函数,注意,函数名在这里可能拼错,自己在网上搜一下),这个函数获取的位置坐标是屏幕坐标,判断一下是否在按钮里面就可以了。
在C语言中,10的n次方可以表示为pow(10,n)其中pow函数在头文件mathh中,所以调用该函数的时候,必须将mathh加进来,即#include原型:externfloatpow(floatx,floaty);功能:计算x的y次幂。说明:x应大于零,返回幂指数的结果。
以上就是关于C语言鼠标编程的问题,高手指教~~全部的内容,包括:C语言鼠标编程的问题,高手指教~~、请教如何捕捉鼠标按住标题栏移动后放开的消息、c# dev chartcontrol 鼠标移动式怎样显示x轴的的值,时那个属性呢,就是时间显示出来等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)