关于C语言鼠标驱动程序(高手请仔细看)

来源:百度知道 编辑:UC知道 时间:2024/05/20 12:48:52
我需要一个DOS环境下的鼠标驱动程序
以下是网上搜到的程序的核心代码:
void mouse(int *x,int *y,int *z)
{
int a=0,b=0,c=0,a_old=0,b_old=0; int *ball; ball=malloc(imagesize(a,b,a+R,b+R));
getimage(a,b,a+R,b+R,ball); /*第一次将图形(一个空矩形)存入到内存中,内存中存入的是一个空矩形*/
while(c==0) /*直到按键后才返回,不按键一直循环*/
{
getmouse(&a,&b,&c); /*a,为横坐标,b,为列坐标,c为按键状态*/
if(a<0) a=0; /*保证鼠标左边不出界*/
if(b<0) b=0; /*保证上面不出界*/
if(a>getmaxx()-R) a=getmaxx()-R; /*保证右边不出界*/
if(b>getmaxy()-R) b=getmaxy()-R; /*保证下边不出界*/
if(a!=a_old || b!=b_old) /*当鼠标移动时*/
{
putimage(a_old,b_old,ball,0); /*在a_old,b_old输出图形,用来擦掉原来的鼠标*/
getimage(a,b,a+R,b+R,ball); /*这条语句是将目前鼠标所在位置的图形存贮到ball里面试着看着有无这条语句的区别*/
/*不需要在获取了*/
setcolor(GREEN);
setlinestyle(0,0,1);
line(a,b,a+R,b+R/2);
line(a,b,a+R/2,b+R);
line(a+R,b+R/2,a+R/2,b+R);
line(a+R*3/4,b+R*3/4,a+R,b+R); /*画鼠标*/
}
a_old=a;b_old=b;
} /*while()结束*/
*x=a;*y=b;*z=c; /*返回按键后鼠标的

设置鼠标的光标形状
设置鼠标光标需要三个方面信息:
鼠标的外边界:8*8点阵,16个整数
鼠标的内部形状:8*8点阵,16个整数
以及鼠标的热点的相对坐标:int x,y
其中外边界和内边界连续存放,为长度为32的整型数组 int marks[32] SetCurs(unsigned masks[32],x,y)
{ union REGS regs; struct SREGS sregs;
regs.x.ax=9;
regs.x.bx=x; regs.x.cx=y;/* hot spot*/
regs.x.dx=(unsigned)masks;
segread(&sregs); int86(0x33,(r)gs,(r)gs);
}
一些不同形状的光标数据:
//mouse
{0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, //Cursor mask
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x13c0,
0x3ff0, 0x7ff8, 0xfff8, 0xfff8, 0x0824, 0x0822, 0x1ce2, 0x0000},
//empty hand
{0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0x0c00, 0x1200, 0x1200, 0x1200, 0x13fe, 0x1249, 0x1249, 0x1249,
0x7249, 0x9001, 0x9001, 0x9001, 0x8001, 0x8001, 0x4002, 0x3ffc